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

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



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


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



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


struct  Ip_BFu16i  {
  int *v1;
  unsigned int v2:16;
};
//SIG(1 Ip_BFu16i) C1{ Fp Fi:16}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu16i_BFu1c  {
  int *v1;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu16i_BFu1c) C1{ Fp Fi:16 Fc:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu16i_BFu7c  {
  int *v1;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu16i_BFu7c) C1{ Fp Fi:16 Fc:7}



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


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



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


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



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


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



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


struct  Ip_BFu16i_BFu8c  {
  int *v1;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu16i_BFu8c) C1{ Fp Fi:16 Fc:8}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu16i_C  {
  int *v1;
  unsigned int v2:16;
  char v3;
};
//SIG(1 Ip_BFu16i_C) C1{ Fp Fi:16 Fc}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu16i_Uc  {
  int *v1;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 Ip_BFu16i_Uc) C1{ Fp Fi:16 Fc}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu17i  {
  int *v1;
  unsigned int v2:17;
};
//SIG(1 Ip_BFu17i) C1{ Fp Fi:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu17i_BFu1c  {
  int *v1;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu17i_BFu1c) C1{ Fp Fi:17 Fc:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu17i_BFu7c  {
  int *v1;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu17i_BFu7c) C1{ Fp Fi:17 Fc:7}



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


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



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


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



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


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



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


struct  Ip_BFu17i_BFu8c  {
  int *v1;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu17i_BFu8c) C1{ Fp Fi:17 Fc:8}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu17i_C  {
  int *v1;
  unsigned int v2:17;
  char v3;
};
//SIG(1 Ip_BFu17i_C) C1{ Fp Fi:17 Fc}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu17i_Uc  {
  int *v1;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 Ip_BFu17i_Uc) C1{ Fp Fi:17 Fc}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu1c  {
  int *v1;
  unsigned char v2:1;
};
//SIG(1 Ip_BFu1c) C1{ Fp Fc:1}



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


struct  Ip_BFu1c_BFu15i  {
  int *v1;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu1c_BFu15i) C1{ Fp Fc:1 Fi:15}



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


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



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


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



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


struct  Ip_BFu1c_BFu16i  {
  int *v1;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu1c_BFu16i) C1{ Fp Fc:1 Fi:16}



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


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



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


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



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


struct  Ip_BFu1c_BFu17i  {
  int *v1;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu1c_BFu17i) C1{ Fp Fc:1 Fi:17}



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu1c_BFu31i  {
  int *v1;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu1c_BFu31i) C1{ Fp Fc:1 Fi:31}



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


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



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


struct  Ip_BFu1c_BFu32i  {
  int *v1;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu1c_BFu32i) C1{ Fp Fc:1 Fi:32}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu1c_F  {
  int *v1;
  unsigned char v2:1;
  float v3;
};
//SIG(1 Ip_BFu1c_F) C1{ Fp Fc:1 Fi}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31i  {
  int *v1;
  unsigned int v2:31;
};
//SIG(1 Ip_BFu31i) C1{ Fp Fi:31}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31i_BFu1c  {
  int *v1;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu31i_BFu1c) C1{ Fp Fi:31 Fc:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31i_BFu7c  {
  int *v1;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu31i_BFu7c) C1{ Fp Fi:31 Fc:7}



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


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



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


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



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


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



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


struct  Ip_BFu31i_BFu8c  {
  int *v1;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu31i_BFu8c) C1{ Fp Fi:31 Fc:8}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31i_C  {
  int *v1;
  unsigned int v2:31;
  char v3;
};
//SIG(1 Ip_BFu31i_C) C1{ Fp Fi:31 Fc}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31i_Uc  {
  int *v1;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 Ip_BFu31i_Uc) C1{ Fp Fi:31 Fc}



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


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



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


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



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


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



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


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



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


struct  Ip_BFu31ll  {
  int *v1;
  __tsu64 v2:31;
};
//SIG(1 Ip_BFu31ll) C1{ Fp FL:31}



static void Test_Ip_BFu31ll()
{
  {
    init_simple_test("Ip_BFu31ll");
    static STRUCT_IF_C Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll, Ip_BFu31ll)
//============================================================================


struct  Ip_BFu31ll_BFu15i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu31ll_BFu15i) C1{ Fp FL:31 Fi:15}



static void Test_Ip_BFu31ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu15i");
    static STRUCT_IF_C Ip_BFu31ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu15i, Ip_BFu31ll_BFu15i)
//============================================================================


struct  Ip_BFu31ll_BFu15ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu31ll_BFu15ll) C1{ Fp FL:31 FL:15}



static void Test_Ip_BFu31ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 15, 1, "Ip_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 15, hide_ull(1LL<<14), "Ip_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu15ll, Ip_BFu31ll_BFu15ll)
//============================================================================


struct  Ip_BFu31ll_BFu15s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu31ll_BFu15s) C1{ Fp FL:31 Fs:15}



static void Test_Ip_BFu31ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu15s");
    static STRUCT_IF_C Ip_BFu31ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu15s, Ip_BFu31ll_BFu15s)
//============================================================================


struct  Ip_BFu31ll_BFu16i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu31ll_BFu16i) C1{ Fp FL:31 Fi:16}



static void Test_Ip_BFu31ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu16i");
    static STRUCT_IF_C Ip_BFu31ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu16i, Ip_BFu31ll_BFu16i)
//============================================================================


struct  Ip_BFu31ll_BFu16ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu31ll_BFu16ll) C1{ Fp FL:31 FL:16}



static void Test_Ip_BFu31ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 16, 1, "Ip_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 16, hide_ull(1LL<<15), "Ip_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu16ll, Ip_BFu31ll_BFu16ll)
//============================================================================


struct  Ip_BFu31ll_BFu16s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu31ll_BFu16s) C1{ Fp FL:31 Fs:16}



static void Test_Ip_BFu31ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu16s");
    static STRUCT_IF_C Ip_BFu31ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu16s, Ip_BFu31ll_BFu16s)
//============================================================================


struct  Ip_BFu31ll_BFu17i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu31ll_BFu17i) C1{ Fp FL:31 Fi:17}



static void Test_Ip_BFu31ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu17i");
    static STRUCT_IF_C Ip_BFu31ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu17i, Ip_BFu31ll_BFu17i)
//============================================================================


struct  Ip_BFu31ll_BFu17ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu31ll_BFu17ll) C1{ Fp FL:31 FL:17}



static void Test_Ip_BFu31ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 17, 1, "Ip_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 17, hide_ull(1LL<<16), "Ip_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu17ll, Ip_BFu31ll_BFu17ll)
//============================================================================


struct  Ip_BFu31ll_BFu1c  {
  int *v1;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu31ll_BFu1c) C1{ Fp FL:31 Fc:1}



static void Test_Ip_BFu31ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu31ll_BFu1c");
    static STRUCT_IF_C Ip_BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(11,7), 7, 1, 1, "Ip_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu1c, Ip_BFu31ll_BFu1c)
//============================================================================


struct  Ip_BFu31ll_BFu1i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu31ll_BFu1i) C1{ Fp FL:31 Fi:1}



static void Test_Ip_BFu31ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu1i");
    static STRUCT_IF_C Ip_BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(11,7), 7, 1, 1, "Ip_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu1i, Ip_BFu31ll_BFu1i)
//============================================================================


struct  Ip_BFu31ll_BFu1ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu31ll_BFu1ll) C1{ Fp FL:31 FL:1}



static void Test_Ip_BFu31ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), 7, 1, 1, "Ip_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu1ll, Ip_BFu31ll_BFu1ll)
//============================================================================


struct  Ip_BFu31ll_BFu1s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu31ll_BFu1s) C1{ Fp FL:31 Fs:1}



static void Test_Ip_BFu31ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu1s");
    static STRUCT_IF_C Ip_BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(11,7), 7, 1, 1, "Ip_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu1s, Ip_BFu31ll_BFu1s)
//============================================================================


struct  Ip_BFu31ll_BFu31i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu31ll_BFu31i) C1{ Fp FL:31 Fi:31}



static void Test_Ip_BFu31ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu31i");
    static STRUCT_IF_C Ip_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu31i, Ip_BFu31ll_BFu31i)
//============================================================================


struct  Ip_BFu31ll_BFu31ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu31ll_BFu31ll) C1{ Fp FL:31 FL:31}



static void Test_Ip_BFu31ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 31, 1, "Ip_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu31ll, Ip_BFu31ll_BFu31ll)
//============================================================================


struct  Ip_BFu31ll_BFu32i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu31ll_BFu32i) C1{ Fp FL:31 Fi:32}



static void Test_Ip_BFu31ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu32i");
    static STRUCT_IF_C Ip_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu32i, Ip_BFu31ll_BFu32i)
//============================================================================


struct  Ip_BFu31ll_BFu32ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu31ll_BFu32ll) C1{ Fp FL:31 FL:32}



static void Test_Ip_BFu31ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 32, 1, "Ip_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 32, hide_ull(1LL<<31), "Ip_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu32ll, Ip_BFu31ll_BFu32ll)
//============================================================================


struct  Ip_BFu31ll_BFu33  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu31ll_BFu33) C1{ Fp FL:31 FL:33}



static void Test_Ip_BFu31ll_BFu33()
{
  {
    init_simple_test("Ip_BFu31ll_BFu33");
    static STRUCT_IF_C Ip_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 33, 1, "Ip_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 33, hide_ull(1LL<<32), "Ip_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu33, Ip_BFu31ll_BFu33)
//============================================================================


struct  Ip_BFu31ll_BFu7c  {
  int *v1;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu31ll_BFu7c) C1{ Fp FL:31 Fc:7}



static void Test_Ip_BFu31ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu31ll_BFu7c");
    static STRUCT_IF_C Ip_BFu31ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu7c, Ip_BFu31ll_BFu7c)
//============================================================================


struct  Ip_BFu31ll_BFu7i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu31ll_BFu7i) C1{ Fp FL:31 Fi:7}



static void Test_Ip_BFu31ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu7i");
    static STRUCT_IF_C Ip_BFu31ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu7i, Ip_BFu31ll_BFu7i)
//============================================================================


struct  Ip_BFu31ll_BFu7ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu31ll_BFu7ll) C1{ Fp FL:31 FL:7}



static void Test_Ip_BFu31ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 7, 1, "Ip_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 7, hide_ull(1LL<<6), "Ip_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu7ll, Ip_BFu31ll_BFu7ll)
//============================================================================


struct  Ip_BFu31ll_BFu7s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu31ll_BFu7s) C1{ Fp FL:31 Fs:7}



static void Test_Ip_BFu31ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu7s");
    static STRUCT_IF_C Ip_BFu31ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu7s, Ip_BFu31ll_BFu7s)
//============================================================================


struct  Ip_BFu31ll_BFu8c  {
  int *v1;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu31ll_BFu8c) C1{ Fp FL:31 Fc:8}



static void Test_Ip_BFu31ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu31ll_BFu8c");
    static STRUCT_IF_C Ip_BFu31ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu8c, Ip_BFu31ll_BFu8c)
//============================================================================


struct  Ip_BFu31ll_BFu8i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu31ll_BFu8i) C1{ Fp FL:31 Fi:8}



static void Test_Ip_BFu31ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu8i");
    static STRUCT_IF_C Ip_BFu31ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu8i, Ip_BFu31ll_BFu8i)
//============================================================================


struct  Ip_BFu31ll_BFu8ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu31ll_BFu8ll) C1{ Fp FL:31 FL:8}



static void Test_Ip_BFu31ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 8, 1, "Ip_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 8, hide_ull(1LL<<7), "Ip_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu8ll, Ip_BFu31ll_BFu8ll)
//============================================================================


struct  Ip_BFu31ll_BFu8s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu31ll_BFu8s) C1{ Fp FL:31 Fs:8}



static void Test_Ip_BFu31ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu8s");
    static STRUCT_IF_C Ip_BFu31ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu8s, Ip_BFu31ll_BFu8s)
//============================================================================


struct  Ip_BFu31ll_BFu9i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu31ll_BFu9i) C1{ Fp FL:31 Fi:9}



static void Test_Ip_BFu31ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu9i");
    static STRUCT_IF_C Ip_BFu31ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu9i, Ip_BFu31ll_BFu9i)
//============================================================================


struct  Ip_BFu31ll_BFu9ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu31ll_BFu9ll) C1{ Fp FL:31 FL:9}



static void Test_Ip_BFu31ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 9, 1, "Ip_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(11,7), ABISELECT(7,7), 9, hide_ull(1LL<<8), "Ip_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu9ll, Ip_BFu31ll_BFu9ll)
//============================================================================


struct  Ip_BFu31ll_BFu9s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu31ll_BFu9s) C1{ Fp FL:31 Fs:9}



static void Test_Ip_BFu31ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu9s");
    static STRUCT_IF_C Ip_BFu31ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu9s, Ip_BFu31ll_BFu9s)
//============================================================================


struct  Ip_BFu31ll_C  {
  int *v1;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 Ip_BFu31ll_C) C1{ Fp FL:31 Fc}



static void Test_Ip_BFu31ll_C()
{
  {
    init_simple_test("Ip_BFu31ll_C");
    static STRUCT_IF_C Ip_BFu31ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_C");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_C, Ip_BFu31ll_C)
//============================================================================


struct  Ip_BFu31ll_D  {
  int *v1;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 Ip_BFu31ll_D) C1{ Fp FL:31 FL}



static void Test_Ip_BFu31ll_D()
{
  {
    init_simple_test("Ip_BFu31ll_D");
    static STRUCT_IF_C Ip_BFu31ll_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_D, Ip_BFu31ll_D)
//============================================================================


struct  Ip_BFu31ll_F  {
  int *v1;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 Ip_BFu31ll_F) C1{ Fp FL:31 Fi}



static void Test_Ip_BFu31ll_F()
{
  {
    init_simple_test("Ip_BFu31ll_F");
    static STRUCT_IF_C Ip_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_F, Ip_BFu31ll_F)
//============================================================================


struct  Ip_BFu31ll_I  {
  int *v1;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 Ip_BFu31ll_I) C1{ Fp FL:31 Fi}



static void Test_Ip_BFu31ll_I()
{
  {
    init_simple_test("Ip_BFu31ll_I");
    static STRUCT_IF_C Ip_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_I, Ip_BFu31ll_I)
//============================================================================


struct  Ip_BFu31ll_Ip  {
  int *v1;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 Ip_BFu31ll_Ip) C1{ Fp FL:31 Fp}



static void Test_Ip_BFu31ll_Ip()
{
  {
    init_simple_test("Ip_BFu31ll_Ip");
    static STRUCT_IF_C Ip_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Ip, Ip_BFu31ll_Ip)
//============================================================================


struct  Ip_BFu31ll_L  {
  int *v1;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 Ip_BFu31ll_L) C1{ Fp FL:31 FL}



static void Test_Ip_BFu31ll_L()
{
  {
    init_simple_test("Ip_BFu31ll_L");
    static STRUCT_IF_C Ip_BFu31ll_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_L, Ip_BFu31ll_L)
//============================================================================


struct  Ip_BFu31ll_S  {
  int *v1;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 Ip_BFu31ll_S) C1{ Fp FL:31 Fs}



static void Test_Ip_BFu31ll_S()
{
  {
    init_simple_test("Ip_BFu31ll_S");
    static STRUCT_IF_C Ip_BFu31ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_S");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_S, Ip_BFu31ll_S)
//============================================================================


struct  Ip_BFu31ll_Uc  {
  int *v1;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 Ip_BFu31ll_Uc) C1{ Fp FL:31 Fc}



static void Test_Ip_BFu31ll_Uc()
{
  {
    init_simple_test("Ip_BFu31ll_Uc");
    static STRUCT_IF_C Ip_BFu31ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Uc");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Uc, Ip_BFu31ll_Uc)
//============================================================================


struct  Ip_BFu31ll_Ui  {
  int *v1;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 Ip_BFu31ll_Ui) C1{ Fp FL:31 Fi}



static void Test_Ip_BFu31ll_Ui()
{
  {
    init_simple_test("Ip_BFu31ll_Ui");
    static STRUCT_IF_C Ip_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Ui, Ip_BFu31ll_Ui)
//============================================================================


struct  Ip_BFu31ll_Ul  {
  int *v1;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 Ip_BFu31ll_Ul) C1{ Fp FL:31 FL}



static void Test_Ip_BFu31ll_Ul()
{
  {
    init_simple_test("Ip_BFu31ll_Ul");
    static STRUCT_IF_C Ip_BFu31ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Ul, Ip_BFu31ll_Ul)
//============================================================================


struct  Ip_BFu31ll_Us  {
  int *v1;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 Ip_BFu31ll_Us) C1{ Fp FL:31 Fs}



static void Test_Ip_BFu31ll_Us()
{
  {
    init_simple_test("Ip_BFu31ll_Us");
    static STRUCT_IF_C Ip_BFu31ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Us");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Us, Ip_BFu31ll_Us)
//============================================================================


struct  Ip_BFu31ll_Vp  {
  int *v1;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 Ip_BFu31ll_Vp) C1{ Fp FL:31 Fp}



static void Test_Ip_BFu31ll_Vp()
{
  {
    init_simple_test("Ip_BFu31ll_Vp");
    static STRUCT_IF_C Ip_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_Vp, Ip_BFu31ll_Vp)
//============================================================================


struct  Ip_BFu32i  {
  int *v1;
  unsigned int v2:32;
};
//SIG(1 Ip_BFu32i) C1{ Fp Fi:32}



static void Test_Ip_BFu32i()
{
  {
    init_simple_test("Ip_BFu32i");
    static STRUCT_IF_C Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i, Ip_BFu32i)
//============================================================================


struct  Ip_BFu32i_BFu15i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu32i_BFu15i) C1{ Fp Fi:32 Fi:15}



static void Test_Ip_BFu32i_BFu15i()
{
  {
    init_simple_test("Ip_BFu32i_BFu15i");
    static STRUCT_IF_C Ip_BFu32i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu15i, Ip_BFu32i_BFu15i)
//============================================================================


struct  Ip_BFu32i_BFu15ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu32i_BFu15ll) C1{ Fp Fi:32 FL:15}



static void Test_Ip_BFu32i_BFu15ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu15ll");
    static STRUCT_IF_C Ip_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu15ll, Ip_BFu32i_BFu15ll)
//============================================================================


struct  Ip_BFu32i_BFu15s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu32i_BFu15s) C1{ Fp Fi:32 Fs:15}



static void Test_Ip_BFu32i_BFu15s()
{
  {
    init_simple_test("Ip_BFu32i_BFu15s");
    static STRUCT_IF_C Ip_BFu32i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu15s, Ip_BFu32i_BFu15s)
//============================================================================


struct  Ip_BFu32i_BFu16i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu32i_BFu16i) C1{ Fp Fi:32 Fi:16}



static void Test_Ip_BFu32i_BFu16i()
{
  {
    init_simple_test("Ip_BFu32i_BFu16i");
    static STRUCT_IF_C Ip_BFu32i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu16i, Ip_BFu32i_BFu16i)
//============================================================================


struct  Ip_BFu32i_BFu16ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu32i_BFu16ll) C1{ Fp Fi:32 FL:16}



static void Test_Ip_BFu32i_BFu16ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu16ll");
    static STRUCT_IF_C Ip_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu16ll, Ip_BFu32i_BFu16ll)
//============================================================================


struct  Ip_BFu32i_BFu16s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu32i_BFu16s) C1{ Fp Fi:32 Fs:16}



static void Test_Ip_BFu32i_BFu16s()
{
  {
    init_simple_test("Ip_BFu32i_BFu16s");
    static STRUCT_IF_C Ip_BFu32i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu16s, Ip_BFu32i_BFu16s)
//============================================================================


struct  Ip_BFu32i_BFu17i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu32i_BFu17i) C1{ Fp Fi:32 Fi:17}



static void Test_Ip_BFu32i_BFu17i()
{
  {
    init_simple_test("Ip_BFu32i_BFu17i");
    static STRUCT_IF_C Ip_BFu32i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu17i, Ip_BFu32i_BFu17i)
//============================================================================


struct  Ip_BFu32i_BFu17ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu32i_BFu17ll) C1{ Fp Fi:32 FL:17}



static void Test_Ip_BFu32i_BFu17ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu17ll");
    static STRUCT_IF_C Ip_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu17ll, Ip_BFu32i_BFu17ll)
//============================================================================


struct  Ip_BFu32i_BFu1c  {
  int *v1;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu32i_BFu1c) C1{ Fp Fi:32 Fc:1}



static void Test_Ip_BFu32i_BFu1c()
{
  {
    init_simple_test("Ip_BFu32i_BFu1c");
    static STRUCT_IF_C Ip_BFu32i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu1c, Ip_BFu32i_BFu1c)
//============================================================================


struct  Ip_BFu32i_BFu1i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu32i_BFu1i) C1{ Fp Fi:32 Fi:1}



static void Test_Ip_BFu32i_BFu1i()
{
  {
    init_simple_test("Ip_BFu32i_BFu1i");
    static STRUCT_IF_C Ip_BFu32i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu1i, Ip_BFu32i_BFu1i)
//============================================================================


struct  Ip_BFu32i_BFu1ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu32i_BFu1ll) C1{ Fp Fi:32 FL:1}



static void Test_Ip_BFu32i_BFu1ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu1ll");
    static STRUCT_IF_C Ip_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu1ll, Ip_BFu32i_BFu1ll)
//============================================================================


struct  Ip_BFu32i_BFu1s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu32i_BFu1s) C1{ Fp Fi:32 Fs:1}



static void Test_Ip_BFu32i_BFu1s()
{
  {
    init_simple_test("Ip_BFu32i_BFu1s");
    static STRUCT_IF_C Ip_BFu32i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu1s, Ip_BFu32i_BFu1s)
//============================================================================


struct  Ip_BFu32i_BFu31i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu32i_BFu31i) C1{ Fp Fi:32 Fi:31}



static void Test_Ip_BFu32i_BFu31i()
{
  {
    init_simple_test("Ip_BFu32i_BFu31i");
    static STRUCT_IF_C Ip_BFu32i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu31i, Ip_BFu32i_BFu31i)
//============================================================================


struct  Ip_BFu32i_BFu31ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu32i_BFu31ll) C1{ Fp Fi:32 FL:31}



static void Test_Ip_BFu32i_BFu31ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu31ll");
    static STRUCT_IF_C Ip_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu31ll, Ip_BFu32i_BFu31ll)
//============================================================================


struct  Ip_BFu32i_BFu32i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu32i_BFu32i) C1{ Fp Fi:32 Fi:32}



static void Test_Ip_BFu32i_BFu32i()
{
  {
    init_simple_test("Ip_BFu32i_BFu32i");
    static STRUCT_IF_C Ip_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu32i, Ip_BFu32i_BFu32i)
//============================================================================


struct  Ip_BFu32i_BFu32ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu32i_BFu32ll) C1{ Fp Fi:32 FL:32}



static void Test_Ip_BFu32i_BFu32ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu32ll");
    static STRUCT_IF_C Ip_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu32ll, Ip_BFu32i_BFu32ll)
//============================================================================


struct  Ip_BFu32i_BFu33  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu32i_BFu33) C1{ Fp Fi:32 FL:33}



static void Test_Ip_BFu32i_BFu33()
{
  {
    init_simple_test("Ip_BFu32i_BFu33");
    static STRUCT_IF_C Ip_BFu32i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu33, Ip_BFu32i_BFu33)
//============================================================================


struct  Ip_BFu32i_BFu7c  {
  int *v1;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu32i_BFu7c) C1{ Fp Fi:32 Fc:7}



static void Test_Ip_BFu32i_BFu7c()
{
  {
    init_simple_test("Ip_BFu32i_BFu7c");
    static STRUCT_IF_C Ip_BFu32i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu7c, Ip_BFu32i_BFu7c)
//============================================================================


struct  Ip_BFu32i_BFu7i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu32i_BFu7i) C1{ Fp Fi:32 Fi:7}



static void Test_Ip_BFu32i_BFu7i()
{
  {
    init_simple_test("Ip_BFu32i_BFu7i");
    static STRUCT_IF_C Ip_BFu32i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu7i, Ip_BFu32i_BFu7i)
//============================================================================


struct  Ip_BFu32i_BFu7ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu32i_BFu7ll) C1{ Fp Fi:32 FL:7}



static void Test_Ip_BFu32i_BFu7ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu7ll");
    static STRUCT_IF_C Ip_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu7ll, Ip_BFu32i_BFu7ll)
//============================================================================


struct  Ip_BFu32i_BFu7s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu32i_BFu7s) C1{ Fp Fi:32 Fs:7}



static void Test_Ip_BFu32i_BFu7s()
{
  {
    init_simple_test("Ip_BFu32i_BFu7s");
    static STRUCT_IF_C Ip_BFu32i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu7s, Ip_BFu32i_BFu7s)
//============================================================================


struct  Ip_BFu32i_BFu8c  {
  int *v1;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu32i_BFu8c) C1{ Fp Fi:32 Fc:8}



static void Test_Ip_BFu32i_BFu8c()
{
  {
    init_simple_test("Ip_BFu32i_BFu8c");
    static STRUCT_IF_C Ip_BFu32i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu8c, Ip_BFu32i_BFu8c)
//============================================================================


struct  Ip_BFu32i_BFu8i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu32i_BFu8i) C1{ Fp Fi:32 Fi:8}



static void Test_Ip_BFu32i_BFu8i()
{
  {
    init_simple_test("Ip_BFu32i_BFu8i");
    static STRUCT_IF_C Ip_BFu32i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu8i, Ip_BFu32i_BFu8i)
//============================================================================


struct  Ip_BFu32i_BFu8ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu32i_BFu8ll) C1{ Fp Fi:32 FL:8}



static void Test_Ip_BFu32i_BFu8ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu8ll");
    static STRUCT_IF_C Ip_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu8ll, Ip_BFu32i_BFu8ll)
//============================================================================


struct  Ip_BFu32i_BFu8s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu32i_BFu8s) C1{ Fp Fi:32 Fs:8}



static void Test_Ip_BFu32i_BFu8s()
{
  {
    init_simple_test("Ip_BFu32i_BFu8s");
    static STRUCT_IF_C Ip_BFu32i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu8s, Ip_BFu32i_BFu8s)
//============================================================================


struct  Ip_BFu32i_BFu9i  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu32i_BFu9i) C1{ Fp Fi:32 Fi:9}



static void Test_Ip_BFu32i_BFu9i()
{
  {
    init_simple_test("Ip_BFu32i_BFu9i");
    static STRUCT_IF_C Ip_BFu32i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu9i, Ip_BFu32i_BFu9i)
//============================================================================


struct  Ip_BFu32i_BFu9ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu32i_BFu9ll) C1{ Fp Fi:32 FL:9}



static void Test_Ip_BFu32i_BFu9ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu9ll");
    static STRUCT_IF_C Ip_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu9ll, Ip_BFu32i_BFu9ll)
//============================================================================


struct  Ip_BFu32i_BFu9s  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu32i_BFu9s) C1{ Fp Fi:32 Fs:9}



static void Test_Ip_BFu32i_BFu9s()
{
  {
    init_simple_test("Ip_BFu32i_BFu9s");
    static STRUCT_IF_C Ip_BFu32i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu9s, Ip_BFu32i_BFu9s)
//============================================================================


struct  Ip_BFu32i_C  {
  int *v1;
  unsigned int v2:32;
  char v3;
};
//SIG(1 Ip_BFu32i_C) C1{ Fp Fi:32 Fc}



static void Test_Ip_BFu32i_C()
{
  {
    init_simple_test("Ip_BFu32i_C");
    static STRUCT_IF_C Ip_BFu32i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_C");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_C, Ip_BFu32i_C)
//============================================================================


struct  Ip_BFu32i_D  {
  int *v1;
  unsigned int v2:32;
  double v3;
};
//SIG(1 Ip_BFu32i_D) C1{ Fp Fi:32 FL}



static void Test_Ip_BFu32i_D()
{
  {
    init_simple_test("Ip_BFu32i_D");
    static STRUCT_IF_C Ip_BFu32i_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_D, Ip_BFu32i_D)
//============================================================================


struct  Ip_BFu32i_F  {
  int *v1;
  unsigned int v2:32;
  float v3;
};
//SIG(1 Ip_BFu32i_F) C1{ Fp Fi:32 Fi}



static void Test_Ip_BFu32i_F()
{
  {
    init_simple_test("Ip_BFu32i_F");
    static STRUCT_IF_C Ip_BFu32i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_F, Ip_BFu32i_F)
//============================================================================


struct  Ip_BFu32i_I  {
  int *v1;
  unsigned int v2:32;
  int v3;
};
//SIG(1 Ip_BFu32i_I) C1{ Fp Fi:32 Fi}



static void Test_Ip_BFu32i_I()
{
  {
    init_simple_test("Ip_BFu32i_I");
    static STRUCT_IF_C Ip_BFu32i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_I, Ip_BFu32i_I)
//============================================================================


struct  Ip_BFu32i_Ip  {
  int *v1;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 Ip_BFu32i_Ip) C1{ Fp Fi:32 Fp}



static void Test_Ip_BFu32i_Ip()
{
  {
    init_simple_test("Ip_BFu32i_Ip");
    static STRUCT_IF_C Ip_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Ip, Ip_BFu32i_Ip)
//============================================================================


struct  Ip_BFu32i_L  {
  int *v1;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 Ip_BFu32i_L) C1{ Fp Fi:32 FL}



static void Test_Ip_BFu32i_L()
{
  {
    init_simple_test("Ip_BFu32i_L");
    static STRUCT_IF_C Ip_BFu32i_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_L, Ip_BFu32i_L)
//============================================================================


struct  Ip_BFu32i_S  {
  int *v1;
  unsigned int v2:32;
  short v3;
};
//SIG(1 Ip_BFu32i_S) C1{ Fp Fi:32 Fs}



static void Test_Ip_BFu32i_S()
{
  {
    init_simple_test("Ip_BFu32i_S");
    static STRUCT_IF_C Ip_BFu32i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_S");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_S, Ip_BFu32i_S)
//============================================================================


struct  Ip_BFu32i_Uc  {
  int *v1;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 Ip_BFu32i_Uc) C1{ Fp Fi:32 Fc}



static void Test_Ip_BFu32i_Uc()
{
  {
    init_simple_test("Ip_BFu32i_Uc");
    static STRUCT_IF_C Ip_BFu32i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Uc");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Uc, Ip_BFu32i_Uc)
//============================================================================


struct  Ip_BFu32i_Ui  {
  int *v1;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 Ip_BFu32i_Ui) C1{ Fp Fi:32 Fi}



static void Test_Ip_BFu32i_Ui()
{
  {
    init_simple_test("Ip_BFu32i_Ui");
    static STRUCT_IF_C Ip_BFu32i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Ui, Ip_BFu32i_Ui)
//============================================================================


struct  Ip_BFu32i_Ul  {
  int *v1;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 Ip_BFu32i_Ul) C1{ Fp Fi:32 FL}



static void Test_Ip_BFu32i_Ul()
{
  {
    init_simple_test("Ip_BFu32i_Ul");
    static STRUCT_IF_C Ip_BFu32i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Ul, Ip_BFu32i_Ul)
//============================================================================


struct  Ip_BFu32i_Us  {
  int *v1;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 Ip_BFu32i_Us) C1{ Fp Fi:32 Fs}



static void Test_Ip_BFu32i_Us()
{
  {
    init_simple_test("Ip_BFu32i_Us");
    static STRUCT_IF_C Ip_BFu32i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Us");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Us, Ip_BFu32i_Us)
//============================================================================


struct  Ip_BFu32i_Vp  {
  int *v1;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 Ip_BFu32i_Vp) C1{ Fp Fi:32 Fp}



static void Test_Ip_BFu32i_Vp()
{
  {
    init_simple_test("Ip_BFu32i_Vp");
    static STRUCT_IF_C Ip_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_Vp, Ip_BFu32i_Vp)
//============================================================================


struct  Ip_BFu32ll  {
  int *v1;
  __tsu64 v2:32;
};
//SIG(1 Ip_BFu32ll) C1{ Fp FL:32}



static void Test_Ip_BFu32ll()
{
  {
    init_simple_test("Ip_BFu32ll");
    static STRUCT_IF_C Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll, Ip_BFu32ll)
//============================================================================


struct  Ip_BFu32ll_BFu15i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu32ll_BFu15i) C1{ Fp FL:32 Fi:15}



static void Test_Ip_BFu32ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu15i");
    static STRUCT_IF_C Ip_BFu32ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu15i, Ip_BFu32ll_BFu15i)
//============================================================================


struct  Ip_BFu32ll_BFu15ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu32ll_BFu15ll) C1{ Fp FL:32 FL:15}



static void Test_Ip_BFu32ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu15ll, Ip_BFu32ll_BFu15ll)
//============================================================================


struct  Ip_BFu32ll_BFu15s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu32ll_BFu15s) C1{ Fp FL:32 Fs:15}



static void Test_Ip_BFu32ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu15s");
    static STRUCT_IF_C Ip_BFu32ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu15s, Ip_BFu32ll_BFu15s)
//============================================================================


struct  Ip_BFu32ll_BFu16i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu32ll_BFu16i) C1{ Fp FL:32 Fi:16}



static void Test_Ip_BFu32ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu16i");
    static STRUCT_IF_C Ip_BFu32ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu16i, Ip_BFu32ll_BFu16i)
//============================================================================


struct  Ip_BFu32ll_BFu16ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu32ll_BFu16ll) C1{ Fp FL:32 FL:16}



static void Test_Ip_BFu32ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu16ll, Ip_BFu32ll_BFu16ll)
//============================================================================


struct  Ip_BFu32ll_BFu16s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu32ll_BFu16s) C1{ Fp FL:32 Fs:16}



static void Test_Ip_BFu32ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu16s");
    static STRUCT_IF_C Ip_BFu32ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu16s, Ip_BFu32ll_BFu16s)
//============================================================================


struct  Ip_BFu32ll_BFu17i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu32ll_BFu17i) C1{ Fp FL:32 Fi:17}



static void Test_Ip_BFu32ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu17i");
    static STRUCT_IF_C Ip_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu17i, Ip_BFu32ll_BFu17i)
//============================================================================


struct  Ip_BFu32ll_BFu17ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu32ll_BFu17ll) C1{ Fp FL:32 FL:17}



static void Test_Ip_BFu32ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu17ll, Ip_BFu32ll_BFu17ll)
//============================================================================


struct  Ip_BFu32ll_BFu1c  {
  int *v1;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu32ll_BFu1c) C1{ Fp FL:32 Fc:1}



static void Test_Ip_BFu32ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu32ll_BFu1c");
    static STRUCT_IF_C Ip_BFu32ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu1c, Ip_BFu32ll_BFu1c)
//============================================================================


struct  Ip_BFu32ll_BFu1i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu32ll_BFu1i) C1{ Fp FL:32 Fi:1}



static void Test_Ip_BFu32ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu1i");
    static STRUCT_IF_C Ip_BFu32ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu1i, Ip_BFu32ll_BFu1i)
//============================================================================


struct  Ip_BFu32ll_BFu1ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu32ll_BFu1ll) C1{ Fp FL:32 FL:1}



static void Test_Ip_BFu32ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu1ll, Ip_BFu32ll_BFu1ll)
//============================================================================


struct  Ip_BFu32ll_BFu1s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu32ll_BFu1s) C1{ Fp FL:32 Fs:1}



static void Test_Ip_BFu32ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu1s");
    static STRUCT_IF_C Ip_BFu32ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu1s, Ip_BFu32ll_BFu1s)
//============================================================================


struct  Ip_BFu32ll_BFu31i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu32ll_BFu31i) C1{ Fp FL:32 Fi:31}



static void Test_Ip_BFu32ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu31i");
    static STRUCT_IF_C Ip_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu31i, Ip_BFu32ll_BFu31i)
//============================================================================


struct  Ip_BFu32ll_BFu31ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu32ll_BFu31ll) C1{ Fp FL:32 FL:31}



static void Test_Ip_BFu32ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu31ll, Ip_BFu32ll_BFu31ll)
//============================================================================


struct  Ip_BFu32ll_BFu32i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu32ll_BFu32i) C1{ Fp FL:32 Fi:32}



static void Test_Ip_BFu32ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu32i");
    static STRUCT_IF_C Ip_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu32i, Ip_BFu32ll_BFu32i)
//============================================================================


struct  Ip_BFu32ll_BFu32ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu32ll_BFu32ll) C1{ Fp FL:32 FL:32}



static void Test_Ip_BFu32ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu32ll, Ip_BFu32ll_BFu32ll)
//============================================================================


struct  Ip_BFu32ll_BFu33  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu32ll_BFu33) C1{ Fp FL:32 FL:33}



static void Test_Ip_BFu32ll_BFu33()
{
  {
    init_simple_test("Ip_BFu32ll_BFu33");
    static STRUCT_IF_C Ip_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu33, Ip_BFu32ll_BFu33)
//============================================================================


struct  Ip_BFu32ll_BFu7c  {
  int *v1;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu32ll_BFu7c) C1{ Fp FL:32 Fc:7}



static void Test_Ip_BFu32ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu32ll_BFu7c");
    static STRUCT_IF_C Ip_BFu32ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu7c, Ip_BFu32ll_BFu7c)
//============================================================================


struct  Ip_BFu32ll_BFu7i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu32ll_BFu7i) C1{ Fp FL:32 Fi:7}



static void Test_Ip_BFu32ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu7i");
    static STRUCT_IF_C Ip_BFu32ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu7i, Ip_BFu32ll_BFu7i)
//============================================================================


struct  Ip_BFu32ll_BFu7ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu32ll_BFu7ll) C1{ Fp FL:32 FL:7}



static void Test_Ip_BFu32ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu7ll, Ip_BFu32ll_BFu7ll)
//============================================================================


struct  Ip_BFu32ll_BFu7s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu32ll_BFu7s) C1{ Fp FL:32 Fs:7}



static void Test_Ip_BFu32ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu7s");
    static STRUCT_IF_C Ip_BFu32ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu7s, Ip_BFu32ll_BFu7s)
//============================================================================


struct  Ip_BFu32ll_BFu8c  {
  int *v1;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu32ll_BFu8c) C1{ Fp FL:32 Fc:8}



static void Test_Ip_BFu32ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu32ll_BFu8c");
    static STRUCT_IF_C Ip_BFu32ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu8c, Ip_BFu32ll_BFu8c)
//============================================================================


struct  Ip_BFu32ll_BFu8i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu32ll_BFu8i) C1{ Fp FL:32 Fi:8}



static void Test_Ip_BFu32ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu8i");
    static STRUCT_IF_C Ip_BFu32ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu8i, Ip_BFu32ll_BFu8i)
//============================================================================


struct  Ip_BFu32ll_BFu8ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu32ll_BFu8ll) C1{ Fp FL:32 FL:8}



static void Test_Ip_BFu32ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu8ll, Ip_BFu32ll_BFu8ll)
//============================================================================


struct  Ip_BFu32ll_BFu8s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu32ll_BFu8s) C1{ Fp FL:32 Fs:8}



static void Test_Ip_BFu32ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu8s");
    static STRUCT_IF_C Ip_BFu32ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu8s, Ip_BFu32ll_BFu8s)
//============================================================================


struct  Ip_BFu32ll_BFu9i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu32ll_BFu9i) C1{ Fp FL:32 Fi:9}



static void Test_Ip_BFu32ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu9i");
    static STRUCT_IF_C Ip_BFu32ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu9i, Ip_BFu32ll_BFu9i)
//============================================================================


struct  Ip_BFu32ll_BFu9ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu32ll_BFu9ll) C1{ Fp FL:32 FL:9}



static void Test_Ip_BFu32ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu9ll, Ip_BFu32ll_BFu9ll)
//============================================================================


struct  Ip_BFu32ll_BFu9s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu32ll_BFu9s) C1{ Fp FL:32 Fs:9}



static void Test_Ip_BFu32ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu9s");
    static STRUCT_IF_C Ip_BFu32ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu9s, Ip_BFu32ll_BFu9s)
//============================================================================


struct  Ip_BFu32ll_C  {
  int *v1;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 Ip_BFu32ll_C) C1{ Fp FL:32 Fc}



static void Test_Ip_BFu32ll_C()
{
  {
    init_simple_test("Ip_BFu32ll_C");
    static STRUCT_IF_C Ip_BFu32ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_C");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_C, Ip_BFu32ll_C)
//============================================================================


struct  Ip_BFu32ll_D  {
  int *v1;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 Ip_BFu32ll_D) C1{ Fp FL:32 FL}



static void Test_Ip_BFu32ll_D()
{
  {
    init_simple_test("Ip_BFu32ll_D");
    static STRUCT_IF_C Ip_BFu32ll_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_D, Ip_BFu32ll_D)
//============================================================================


struct  Ip_BFu32ll_F  {
  int *v1;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 Ip_BFu32ll_F) C1{ Fp FL:32 Fi}



static void Test_Ip_BFu32ll_F()
{
  {
    init_simple_test("Ip_BFu32ll_F");
    static STRUCT_IF_C Ip_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_F, Ip_BFu32ll_F)
//============================================================================


struct  Ip_BFu32ll_I  {
  int *v1;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 Ip_BFu32ll_I) C1{ Fp FL:32 Fi}



static void Test_Ip_BFu32ll_I()
{
  {
    init_simple_test("Ip_BFu32ll_I");
    static STRUCT_IF_C Ip_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_I, Ip_BFu32ll_I)
//============================================================================


struct  Ip_BFu32ll_Ip  {
  int *v1;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 Ip_BFu32ll_Ip) C1{ Fp FL:32 Fp}



static void Test_Ip_BFu32ll_Ip()
{
  {
    init_simple_test("Ip_BFu32ll_Ip");
    static STRUCT_IF_C Ip_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Ip, Ip_BFu32ll_Ip)
//============================================================================


struct  Ip_BFu32ll_L  {
  int *v1;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 Ip_BFu32ll_L) C1{ Fp FL:32 FL}



static void Test_Ip_BFu32ll_L()
{
  {
    init_simple_test("Ip_BFu32ll_L");
    static STRUCT_IF_C Ip_BFu32ll_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_L, Ip_BFu32ll_L)
//============================================================================


struct  Ip_BFu32ll_S  {
  int *v1;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 Ip_BFu32ll_S) C1{ Fp FL:32 Fs}



static void Test_Ip_BFu32ll_S()
{
  {
    init_simple_test("Ip_BFu32ll_S");
    static STRUCT_IF_C Ip_BFu32ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_S");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_S, Ip_BFu32ll_S)
//============================================================================


struct  Ip_BFu32ll_Uc  {
  int *v1;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 Ip_BFu32ll_Uc) C1{ Fp FL:32 Fc}



static void Test_Ip_BFu32ll_Uc()
{
  {
    init_simple_test("Ip_BFu32ll_Uc");
    static STRUCT_IF_C Ip_BFu32ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Uc");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Uc, Ip_BFu32ll_Uc)
//============================================================================


struct  Ip_BFu32ll_Ui  {
  int *v1;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 Ip_BFu32ll_Ui) C1{ Fp FL:32 Fi}



static void Test_Ip_BFu32ll_Ui()
{
  {
    init_simple_test("Ip_BFu32ll_Ui");
    static STRUCT_IF_C Ip_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Ui, Ip_BFu32ll_Ui)
//============================================================================


struct  Ip_BFu32ll_Ul  {
  int *v1;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 Ip_BFu32ll_Ul) C1{ Fp FL:32 FL}



static void Test_Ip_BFu32ll_Ul()
{
  {
    init_simple_test("Ip_BFu32ll_Ul");
    static STRUCT_IF_C Ip_BFu32ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Ul, Ip_BFu32ll_Ul)
//============================================================================


struct  Ip_BFu32ll_Us  {
  int *v1;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 Ip_BFu32ll_Us) C1{ Fp FL:32 Fs}



static void Test_Ip_BFu32ll_Us()
{
  {
    init_simple_test("Ip_BFu32ll_Us");
    static STRUCT_IF_C Ip_BFu32ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Us");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Us, Ip_BFu32ll_Us)
//============================================================================


struct  Ip_BFu32ll_Vp  {
  int *v1;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 Ip_BFu32ll_Vp) C1{ Fp FL:32 Fp}



static void Test_Ip_BFu32ll_Vp()
{
  {
    init_simple_test("Ip_BFu32ll_Vp");
    static STRUCT_IF_C Ip_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_Vp, Ip_BFu32ll_Vp)
//============================================================================


struct  Ip_BFu33  {
  int *v1;
  __tsu64 v2:33;
};
//SIG(1 Ip_BFu33) C1{ Fp FL:33}



static void Test_Ip_BFu33()
{
  {
    init_simple_test("Ip_BFu33");
    static STRUCT_IF_C Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33, Ip_BFu33)
//============================================================================


struct  Ip_BFu33_BFu15i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu33_BFu15i) C1{ Fp FL:33 Fi:15}



static void Test_Ip_BFu33_BFu15i()
{
  {
    init_simple_test("Ip_BFu33_BFu15i");
    static STRUCT_IF_C Ip_BFu33_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, 1, "Ip_BFu33_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, hide_ull(1LL<<14), "Ip_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu15i, Ip_BFu33_BFu15i)
//============================================================================


struct  Ip_BFu33_BFu15ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu33_BFu15ll) C1{ Fp FL:33 FL:15}



static void Test_Ip_BFu33_BFu15ll()
{
  {
    init_simple_test("Ip_BFu33_BFu15ll");
    static STRUCT_IF_C Ip_BFu33_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, 1, "Ip_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, hide_ull(1LL<<14), "Ip_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu15ll, Ip_BFu33_BFu15ll)
//============================================================================


struct  Ip_BFu33_BFu15s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu33_BFu15s) C1{ Fp FL:33 Fs:15}



static void Test_Ip_BFu33_BFu15s()
{
  {
    init_simple_test("Ip_BFu33_BFu15s");
    static STRUCT_IF_C Ip_BFu33_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, 1, "Ip_BFu33_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 15, hide_ull(1LL<<14), "Ip_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu15s, Ip_BFu33_BFu15s)
//============================================================================


struct  Ip_BFu33_BFu16i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu33_BFu16i) C1{ Fp FL:33 Fi:16}



static void Test_Ip_BFu33_BFu16i()
{
  {
    init_simple_test("Ip_BFu33_BFu16i");
    static STRUCT_IF_C Ip_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 16, 1, "Ip_BFu33_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 16, hide_ull(1LL<<15), "Ip_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu16i, Ip_BFu33_BFu16i)
//============================================================================


struct  Ip_BFu33_BFu16ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu33_BFu16ll) C1{ Fp FL:33 FL:16}



static void Test_Ip_BFu33_BFu16ll()
{
  {
    init_simple_test("Ip_BFu33_BFu16ll");
    static STRUCT_IF_C Ip_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 16, 1, "Ip_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 16, hide_ull(1LL<<15), "Ip_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu16ll, Ip_BFu33_BFu16ll)
//============================================================================


struct  Ip_BFu33_BFu16s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu33_BFu16s) C1{ Fp FL:33 Fs:16}



static void Test_Ip_BFu33_BFu16s()
{
  {
    init_simple_test("Ip_BFu33_BFu16s");
    static STRUCT_IF_C Ip_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(14,10), 0, 16, 1, "Ip_BFu33_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(14,10), 0, 16, hide_ull(1LL<<15), "Ip_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu16s, Ip_BFu33_BFu16s)
//============================================================================


struct  Ip_BFu33_BFu17i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu33_BFu17i) C1{ Fp FL:33 Fi:17}



static void Test_Ip_BFu33_BFu17i()
{
  {
    init_simple_test("Ip_BFu33_BFu17i");
    static STRUCT_IF_C Ip_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 17, 1, "Ip_BFu33_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 17, hide_ull(1LL<<16), "Ip_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu17i, Ip_BFu33_BFu17i)
//============================================================================


struct  Ip_BFu33_BFu17ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu33_BFu17ll) C1{ Fp FL:33 FL:17}



static void Test_Ip_BFu33_BFu17ll()
{
  {
    init_simple_test("Ip_BFu33_BFu17ll");
    static STRUCT_IF_C Ip_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 17, 1, "Ip_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 17, hide_ull(1LL<<16), "Ip_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu17ll, Ip_BFu33_BFu17ll)
//============================================================================


struct  Ip_BFu33_BFu1c  {
  int *v1;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu33_BFu1c) C1{ Fp FL:33 Fc:1}



static void Test_Ip_BFu33_BFu1c()
{
  {
    init_simple_test("Ip_BFu33_BFu1c");
    static STRUCT_IF_C Ip_BFu33_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 1, 1, "Ip_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu1c, Ip_BFu33_BFu1c)
//============================================================================


struct  Ip_BFu33_BFu1i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu33_BFu1i) C1{ Fp FL:33 Fi:1}



static void Test_Ip_BFu33_BFu1i()
{
  {
    init_simple_test("Ip_BFu33_BFu1i");
    static STRUCT_IF_C Ip_BFu33_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 1, 1, "Ip_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu1i, Ip_BFu33_BFu1i)
//============================================================================


struct  Ip_BFu33_BFu1ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu33_BFu1ll) C1{ Fp FL:33 FL:1}



static void Test_Ip_BFu33_BFu1ll()
{
  {
    init_simple_test("Ip_BFu33_BFu1ll");
    static STRUCT_IF_C Ip_BFu33_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 1, 1, "Ip_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu1ll, Ip_BFu33_BFu1ll)
//============================================================================


struct  Ip_BFu33_BFu1s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu33_BFu1s) C1{ Fp FL:33 Fs:1}



static void Test_Ip_BFu33_BFu1s()
{
  {
    init_simple_test("Ip_BFu33_BFu1s");
    static STRUCT_IF_C Ip_BFu33_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 1, 1, "Ip_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu1s, Ip_BFu33_BFu1s)
//============================================================================


struct  Ip_BFu33_BFu31i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu33_BFu31i) C1{ Fp FL:33 Fi:31}



static void Test_Ip_BFu33_BFu31i()
{
  {
    init_simple_test("Ip_BFu33_BFu31i");
    static STRUCT_IF_C Ip_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 31, 1, "Ip_BFu33_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 31, hide_ull(1LL<<30), "Ip_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu31i, Ip_BFu33_BFu31i)
//============================================================================


struct  Ip_BFu33_BFu31ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu33_BFu31ll) C1{ Fp FL:33 FL:31}



static void Test_Ip_BFu33_BFu31ll()
{
  {
    init_simple_test("Ip_BFu33_BFu31ll");
    static STRUCT_IF_C Ip_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 31, 1, "Ip_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 31, hide_ull(1LL<<30), "Ip_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu31ll, Ip_BFu33_BFu31ll)
//============================================================================


struct  Ip_BFu33_BFu32i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu33_BFu32i) C1{ Fp FL:33 Fi:32}



static void Test_Ip_BFu33_BFu32i()
{
  {
    init_simple_test("Ip_BFu33_BFu32i");
    static STRUCT_IF_C Ip_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_BFu33_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu32i, Ip_BFu33_BFu32i)
//============================================================================


struct  Ip_BFu33_BFu32ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu33_BFu32ll) C1{ Fp FL:33 FL:32}



static void Test_Ip_BFu33_BFu32ll()
{
  {
    init_simple_test("Ip_BFu33_BFu32ll");
    static STRUCT_IF_C Ip_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,1), 32, 1, "Ip_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,1), 32, hide_ull(1LL<<31), "Ip_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu32ll, Ip_BFu33_BFu32ll)
//============================================================================


struct  Ip_BFu33_BFu33  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu33_BFu33) C1{ Fp FL:33 FL:33}



static void Test_Ip_BFu33_BFu33()
{
  {
    init_simple_test("Ip_BFu33_BFu33");
    static STRUCT_IF_C Ip_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,1), 33, 1, "Ip_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,1), 33, hide_ull(1LL<<32), "Ip_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu33, Ip_BFu33_BFu33)
//============================================================================


struct  Ip_BFu33_BFu7c  {
  int *v1;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu33_BFu7c) C1{ Fp FL:33 Fc:7}



static void Test_Ip_BFu33_BFu7c()
{
  {
    init_simple_test("Ip_BFu33_BFu7c");
    static STRUCT_IF_C Ip_BFu33_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, 1, "Ip_BFu33_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, hide_ull(1LL<<6), "Ip_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu7c, Ip_BFu33_BFu7c)
//============================================================================


struct  Ip_BFu33_BFu7i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu33_BFu7i) C1{ Fp FL:33 Fi:7}



static void Test_Ip_BFu33_BFu7i()
{
  {
    init_simple_test("Ip_BFu33_BFu7i");
    static STRUCT_IF_C Ip_BFu33_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, 1, "Ip_BFu33_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, hide_ull(1LL<<6), "Ip_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu7i, Ip_BFu33_BFu7i)
//============================================================================


struct  Ip_BFu33_BFu7ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu33_BFu7ll) C1{ Fp FL:33 FL:7}



static void Test_Ip_BFu33_BFu7ll()
{
  {
    init_simple_test("Ip_BFu33_BFu7ll");
    static STRUCT_IF_C Ip_BFu33_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, 1, "Ip_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, hide_ull(1LL<<6), "Ip_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu7ll, Ip_BFu33_BFu7ll)
//============================================================================


struct  Ip_BFu33_BFu7s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu33_BFu7s) C1{ Fp FL:33 Fs:7}



static void Test_Ip_BFu33_BFu7s()
{
  {
    init_simple_test("Ip_BFu33_BFu7s");
    static STRUCT_IF_C Ip_BFu33_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, 1, "Ip_BFu33_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 7, hide_ull(1LL<<6), "Ip_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu7s, Ip_BFu33_BFu7s)
//============================================================================


struct  Ip_BFu33_BFu8c  {
  int *v1;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu33_BFu8c) C1{ Fp FL:33 Fc:8}



static void Test_Ip_BFu33_BFu8c()
{
  {
    init_simple_test("Ip_BFu33_BFu8c");
    static STRUCT_IF_C Ip_BFu33_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(13,9), 0, 8, 1, "Ip_BFu33_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(13,9), 0, 8, hide_ull(1LL<<7), "Ip_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu8c, Ip_BFu33_BFu8c)
//============================================================================


struct  Ip_BFu33_BFu8i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu33_BFu8i) C1{ Fp FL:33 Fi:8}



static void Test_Ip_BFu33_BFu8i()
{
  {
    init_simple_test("Ip_BFu33_BFu8i");
    static STRUCT_IF_C Ip_BFu33_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, 1, "Ip_BFu33_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, hide_ull(1LL<<7), "Ip_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu8i, Ip_BFu33_BFu8i)
//============================================================================


struct  Ip_BFu33_BFu8ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu33_BFu8ll) C1{ Fp FL:33 FL:8}



static void Test_Ip_BFu33_BFu8ll()
{
  {
    init_simple_test("Ip_BFu33_BFu8ll");
    static STRUCT_IF_C Ip_BFu33_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, 1, "Ip_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, hide_ull(1LL<<7), "Ip_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu8ll, Ip_BFu33_BFu8ll)
//============================================================================


struct  Ip_BFu33_BFu8s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu33_BFu8s) C1{ Fp FL:33 Fs:8}



static void Test_Ip_BFu33_BFu8s()
{
  {
    init_simple_test("Ip_BFu33_BFu8s");
    static STRUCT_IF_C Ip_BFu33_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, 1, "Ip_BFu33_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 8, hide_ull(1LL<<7), "Ip_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu8s, Ip_BFu33_BFu8s)
//============================================================================


struct  Ip_BFu33_BFu9i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu33_BFu9i) C1{ Fp FL:33 Fi:9}



static void Test_Ip_BFu33_BFu9i()
{
  {
    init_simple_test("Ip_BFu33_BFu9i");
    static STRUCT_IF_C Ip_BFu33_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, 1, "Ip_BFu33_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, hide_ull(1LL<<8), "Ip_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu9i, Ip_BFu33_BFu9i)
//============================================================================


struct  Ip_BFu33_BFu9ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu33_BFu9ll) C1{ Fp FL:33 FL:9}



static void Test_Ip_BFu33_BFu9ll()
{
  {
    init_simple_test("Ip_BFu33_BFu9ll");
    static STRUCT_IF_C Ip_BFu33_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, 1, "Ip_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, hide_ull(1LL<<8), "Ip_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu9ll, Ip_BFu33_BFu9ll)
//============================================================================


struct  Ip_BFu33_BFu9s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu33_BFu9s) C1{ Fp FL:33 Fs:9}



static void Test_Ip_BFu33_BFu9s()
{
  {
    init_simple_test("Ip_BFu33_BFu9s");
    static STRUCT_IF_C Ip_BFu33_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, 1, "Ip_BFu33_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 1, 9, hide_ull(1LL<<8), "Ip_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu9s, Ip_BFu33_BFu9s)
//============================================================================


struct  Ip_BFu33_C  {
  int *v1;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 Ip_BFu33_C) C1{ Fp FL:33 Fc}



static void Test_Ip_BFu33_C()
{
  {
    init_simple_test("Ip_BFu33_C");
    static STRUCT_IF_C Ip_BFu33_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_C");
    check_field_offset(lv, v3, ABISELECT(13,9), "Ip_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_C, Ip_BFu33_C)
//============================================================================


struct  Ip_BFu33_D  {
  int *v1;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 Ip_BFu33_D) C1{ Fp FL:33 FL}



static void Test_Ip_BFu33_D()
{
  {
    init_simple_test("Ip_BFu33_D");
    static STRUCT_IF_C Ip_BFu33_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_D, Ip_BFu33_D)
//============================================================================


struct  Ip_BFu33_F  {
  int *v1;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 Ip_BFu33_F) C1{ Fp FL:33 Fi}



static void Test_Ip_BFu33_F()
{
  {
    init_simple_test("Ip_BFu33_F");
    static STRUCT_IF_C Ip_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_F");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_F, Ip_BFu33_F)
//============================================================================


struct  Ip_BFu33_I  {
  int *v1;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 Ip_BFu33_I) C1{ Fp FL:33 Fi}



static void Test_Ip_BFu33_I()
{
  {
    init_simple_test("Ip_BFu33_I");
    static STRUCT_IF_C Ip_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_I");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_I, Ip_BFu33_I)
//============================================================================


struct  Ip_BFu33_Ip  {
  int *v1;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 Ip_BFu33_Ip) C1{ Fp FL:33 Fp}



static void Test_Ip_BFu33_Ip()
{
  {
    init_simple_test("Ip_BFu33_Ip");
    static STRUCT_IF_C Ip_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Ip, Ip_BFu33_Ip)
//============================================================================


struct  Ip_BFu33_L  {
  int *v1;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 Ip_BFu33_L) C1{ Fp FL:33 FL}



static void Test_Ip_BFu33_L()
{
  {
    init_simple_test("Ip_BFu33_L");
    static STRUCT_IF_C Ip_BFu33_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_L, Ip_BFu33_L)
//============================================================================


struct  Ip_BFu33_S  {
  int *v1;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 Ip_BFu33_S) C1{ Fp FL:33 Fs}



static void Test_Ip_BFu33_S()
{
  {
    init_simple_test("Ip_BFu33_S");
    static STRUCT_IF_C Ip_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_S");
    check_field_offset(lv, v3, ABISELECT(14,10), "Ip_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_S, Ip_BFu33_S)
//============================================================================


struct  Ip_BFu33_Uc  {
  int *v1;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 Ip_BFu33_Uc) C1{ Fp FL:33 Fc}



static void Test_Ip_BFu33_Uc()
{
  {
    init_simple_test("Ip_BFu33_Uc");
    static STRUCT_IF_C Ip_BFu33_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Uc");
    check_field_offset(lv, v3, ABISELECT(13,9), "Ip_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Uc, Ip_BFu33_Uc)
//============================================================================


struct  Ip_BFu33_Ui  {
  int *v1;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 Ip_BFu33_Ui) C1{ Fp FL:33 Fi}



static void Test_Ip_BFu33_Ui()
{
  {
    init_simple_test("Ip_BFu33_Ui");
    static STRUCT_IF_C Ip_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Ui");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Ui, Ip_BFu33_Ui)
//============================================================================


struct  Ip_BFu33_Ul  {
  int *v1;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 Ip_BFu33_Ul) C1{ Fp FL:33 FL}



static void Test_Ip_BFu33_Ul()
{
  {
    init_simple_test("Ip_BFu33_Ul");
    static STRUCT_IF_C Ip_BFu33_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Ul, Ip_BFu33_Ul)
//============================================================================


struct  Ip_BFu33_Us  {
  int *v1;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 Ip_BFu33_Us) C1{ Fp FL:33 Fs}



static void Test_Ip_BFu33_Us()
{
  {
    init_simple_test("Ip_BFu33_Us");
    static STRUCT_IF_C Ip_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Us");
    check_field_offset(lv, v3, ABISELECT(14,10), "Ip_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Us, Ip_BFu33_Us)
//============================================================================


struct  Ip_BFu33_Vp  {
  int *v1;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 Ip_BFu33_Vp) C1{ Fp FL:33 Fp}



static void Test_Ip_BFu33_Vp()
{
  {
    init_simple_test("Ip_BFu33_Vp");
    static STRUCT_IF_C Ip_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_Vp, Ip_BFu33_Vp)
//============================================================================


struct  Ip_BFu7c  {
  int *v1;
  unsigned char v2:7;
};
//SIG(1 Ip_BFu7c) C1{ Fp Fc:7}



static void Test_Ip_BFu7c()
{
  {
    init_simple_test("Ip_BFu7c");
    static STRUCT_IF_C Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c, Ip_BFu7c)
//============================================================================


struct  Ip_BFu7c_BFu15i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu7c_BFu15i) C1{ Fp Fc:7 Fi:15}



static void Test_Ip_BFu7c_BFu15i()
{
  {
    init_simple_test("Ip_BFu7c_BFu15i");
    static STRUCT_IF_C Ip_BFu7c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu15i, Ip_BFu7c_BFu15i)
//============================================================================


struct  Ip_BFu7c_BFu15ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu7c_BFu15ll) C1{ Fp Fc:7 FL:15}



static void Test_Ip_BFu7c_BFu15ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu15ll");
    static STRUCT_IF_C Ip_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu15ll, Ip_BFu7c_BFu15ll)
//============================================================================


struct  Ip_BFu7c_BFu15s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu7c_BFu15s) C1{ Fp Fc:7 Fs:15}



static void Test_Ip_BFu7c_BFu15s()
{
  {
    init_simple_test("Ip_BFu7c_BFu15s");
    static STRUCT_IF_C Ip_BFu7c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu15s, Ip_BFu7c_BFu15s)
//============================================================================


struct  Ip_BFu7c_BFu16i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu7c_BFu16i) C1{ Fp Fc:7 Fi:16}



static void Test_Ip_BFu7c_BFu16i()
{
  {
    init_simple_test("Ip_BFu7c_BFu16i");
    static STRUCT_IF_C Ip_BFu7c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu16i, Ip_BFu7c_BFu16i)
//============================================================================


struct  Ip_BFu7c_BFu16ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu7c_BFu16ll) C1{ Fp Fc:7 FL:16}



static void Test_Ip_BFu7c_BFu16ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu16ll");
    static STRUCT_IF_C Ip_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu16ll, Ip_BFu7c_BFu16ll)
//============================================================================


struct  Ip_BFu7c_BFu16s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu7c_BFu16s) C1{ Fp Fc:7 Fs:16}



static void Test_Ip_BFu7c_BFu16s()
{
  {
    init_simple_test("Ip_BFu7c_BFu16s");
    static STRUCT_IF_C Ip_BFu7c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu16s, Ip_BFu7c_BFu16s)
//============================================================================


struct  Ip_BFu7c_BFu17i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu7c_BFu17i) C1{ Fp Fc:7 Fi:17}



static void Test_Ip_BFu7c_BFu17i()
{
  {
    init_simple_test("Ip_BFu7c_BFu17i");
    static STRUCT_IF_C Ip_BFu7c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu17i, Ip_BFu7c_BFu17i)
//============================================================================


struct  Ip_BFu7c_BFu17ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu7c_BFu17ll) C1{ Fp Fc:7 FL:17}



static void Test_Ip_BFu7c_BFu17ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu17ll");
    static STRUCT_IF_C Ip_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu17ll, Ip_BFu7c_BFu17ll)
//============================================================================


struct  Ip_BFu7c_BFu1c  {
  int *v1;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu7c_BFu1c) C1{ Fp Fc:7 Fc:1}



static void Test_Ip_BFu7c_BFu1c()
{
  {
    init_simple_test("Ip_BFu7c_BFu1c");
    static STRUCT_IF_C Ip_BFu7c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu1c, Ip_BFu7c_BFu1c)
//============================================================================


struct  Ip_BFu7c_BFu1i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu7c_BFu1i) C1{ Fp Fc:7 Fi:1}



static void Test_Ip_BFu7c_BFu1i()
{
  {
    init_simple_test("Ip_BFu7c_BFu1i");
    static STRUCT_IF_C Ip_BFu7c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu1i, Ip_BFu7c_BFu1i)
//============================================================================


struct  Ip_BFu7c_BFu1ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu7c_BFu1ll) C1{ Fp Fc:7 FL:1}



static void Test_Ip_BFu7c_BFu1ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu1ll");
    static STRUCT_IF_C Ip_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu1ll, Ip_BFu7c_BFu1ll)
//============================================================================


struct  Ip_BFu7c_BFu1s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu7c_BFu1s) C1{ Fp Fc:7 Fs:1}



static void Test_Ip_BFu7c_BFu1s()
{
  {
    init_simple_test("Ip_BFu7c_BFu1s");
    static STRUCT_IF_C Ip_BFu7c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu1s, Ip_BFu7c_BFu1s)
//============================================================================


struct  Ip_BFu7c_BFu31i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu7c_BFu31i) C1{ Fp Fc:7 Fi:31}



static void Test_Ip_BFu7c_BFu31i()
{
  {
    init_simple_test("Ip_BFu7c_BFu31i");
    static STRUCT_IF_C Ip_BFu7c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu31i, Ip_BFu7c_BFu31i)
//============================================================================


struct  Ip_BFu7c_BFu31ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu7c_BFu31ll) C1{ Fp Fc:7 FL:31}



static void Test_Ip_BFu7c_BFu31ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu31ll");
    static STRUCT_IF_C Ip_BFu7c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, 1, "Ip_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, hide_ull(1LL<<30), "Ip_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu31ll, Ip_BFu7c_BFu31ll)
//============================================================================


struct  Ip_BFu7c_BFu32i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu7c_BFu32i) C1{ Fp Fc:7 Fi:32}



static void Test_Ip_BFu7c_BFu32i()
{
  {
    init_simple_test("Ip_BFu7c_BFu32i");
    static STRUCT_IF_C Ip_BFu7c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu32i, Ip_BFu7c_BFu32i)
//============================================================================


struct  Ip_BFu7c_BFu32ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu7c_BFu32ll) C1{ Fp Fc:7 FL:32}



static void Test_Ip_BFu7c_BFu32ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu32ll");
    static STRUCT_IF_C Ip_BFu7c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, 1, "Ip_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, hide_ull(1LL<<31), "Ip_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu32ll, Ip_BFu7c_BFu32ll)
//============================================================================


struct  Ip_BFu7c_BFu33  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu7c_BFu33) C1{ Fp Fc:7 FL:33}



static void Test_Ip_BFu7c_BFu33()
{
  {
    init_simple_test("Ip_BFu7c_BFu33");
    static STRUCT_IF_C Ip_BFu7c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, 1, "Ip_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, hide_ull(1LL<<32), "Ip_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu33, Ip_BFu7c_BFu33)
//============================================================================


struct  Ip_BFu7c_BFu7c  {
  int *v1;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu7c_BFu7c) C1{ Fp Fc:7 Fc:7}



static void Test_Ip_BFu7c_BFu7c()
{
  {
    init_simple_test("Ip_BFu7c_BFu7c");
    static STRUCT_IF_C Ip_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu7c, Ip_BFu7c_BFu7c)
//============================================================================


struct  Ip_BFu7c_BFu7i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu7c_BFu7i) C1{ Fp Fc:7 Fi:7}



static void Test_Ip_BFu7c_BFu7i()
{
  {
    init_simple_test("Ip_BFu7c_BFu7i");
    static STRUCT_IF_C Ip_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu7i, Ip_BFu7c_BFu7i)
//============================================================================


struct  Ip_BFu7c_BFu7ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu7c_BFu7ll) C1{ Fp Fc:7 FL:7}



static void Test_Ip_BFu7c_BFu7ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu7ll");
    static STRUCT_IF_C Ip_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu7ll, Ip_BFu7c_BFu7ll)
//============================================================================


struct  Ip_BFu7c_BFu7s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu7c_BFu7s) C1{ Fp Fc:7 Fs:7}



static void Test_Ip_BFu7c_BFu7s()
{
  {
    init_simple_test("Ip_BFu7c_BFu7s");
    static STRUCT_IF_C Ip_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu7s, Ip_BFu7c_BFu7s)
//============================================================================


struct  Ip_BFu7c_BFu8c  {
  int *v1;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu7c_BFu8c) C1{ Fp Fc:7 Fc:8}



static void Test_Ip_BFu7c_BFu8c()
{
  {
    init_simple_test("Ip_BFu7c_BFu8c");
    static STRUCT_IF_C Ip_BFu7c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu8c, Ip_BFu7c_BFu8c)
//============================================================================


struct  Ip_BFu7c_BFu8i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu7c_BFu8i) C1{ Fp Fc:7 Fi:8}



static void Test_Ip_BFu7c_BFu8i()
{
  {
    init_simple_test("Ip_BFu7c_BFu8i");
    static STRUCT_IF_C Ip_BFu7c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu8i, Ip_BFu7c_BFu8i)
//============================================================================


struct  Ip_BFu7c_BFu8ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu7c_BFu8ll) C1{ Fp Fc:7 FL:8}



static void Test_Ip_BFu7c_BFu8ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu8ll");
    static STRUCT_IF_C Ip_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu8ll, Ip_BFu7c_BFu8ll)
//============================================================================


struct  Ip_BFu7c_BFu8s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu7c_BFu8s) C1{ Fp Fc:7 Fs:8}



static void Test_Ip_BFu7c_BFu8s()
{
  {
    init_simple_test("Ip_BFu7c_BFu8s");
    static STRUCT_IF_C Ip_BFu7c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu8s, Ip_BFu7c_BFu8s)
//============================================================================


struct  Ip_BFu7c_BFu9i  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu7c_BFu9i) C1{ Fp Fc:7 Fi:9}



static void Test_Ip_BFu7c_BFu9i()
{
  {
    init_simple_test("Ip_BFu7c_BFu9i");
    static STRUCT_IF_C Ip_BFu7c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu9i, Ip_BFu7c_BFu9i)
//============================================================================


struct  Ip_BFu7c_BFu9ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu7c_BFu9ll) C1{ Fp Fc:7 FL:9}



static void Test_Ip_BFu7c_BFu9ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu9ll");
    static STRUCT_IF_C Ip_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu9ll, Ip_BFu7c_BFu9ll)
//============================================================================


struct  Ip_BFu7c_BFu9s  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu7c_BFu9s) C1{ Fp Fc:7 Fs:9}



static void Test_Ip_BFu7c_BFu9s()
{
  {
    init_simple_test("Ip_BFu7c_BFu9s");
    static STRUCT_IF_C Ip_BFu7c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu9s, Ip_BFu7c_BFu9s)
//============================================================================


struct  Ip_BFu7c_C  {
  int *v1;
  unsigned char v2:7;
  char v3;
};
//SIG(1 Ip_BFu7c_C) C1{ Fp Fc:7 Fc}



static void Test_Ip_BFu7c_C()
{
  {
    init_simple_test("Ip_BFu7c_C");
    static STRUCT_IF_C Ip_BFu7c_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_C, Ip_BFu7c_C)
//============================================================================


struct  Ip_BFu7c_D  {
  int *v1;
  unsigned char v2:7;
  double v3;
};
//SIG(1 Ip_BFu7c_D) C1{ Fp Fc:7 FL}



static void Test_Ip_BFu7c_D()
{
  {
    init_simple_test("Ip_BFu7c_D");
    static STRUCT_IF_C Ip_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_D, Ip_BFu7c_D)
//============================================================================


struct  Ip_BFu7c_F  {
  int *v1;
  unsigned char v2:7;
  float v3;
};
//SIG(1 Ip_BFu7c_F) C1{ Fp Fc:7 Fi}



static void Test_Ip_BFu7c_F()
{
  {
    init_simple_test("Ip_BFu7c_F");
    static STRUCT_IF_C Ip_BFu7c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_F, Ip_BFu7c_F)
//============================================================================


struct  Ip_BFu7c_I  {
  int *v1;
  unsigned char v2:7;
  int v3;
};
//SIG(1 Ip_BFu7c_I) C1{ Fp Fc:7 Fi}



static void Test_Ip_BFu7c_I()
{
  {
    init_simple_test("Ip_BFu7c_I");
    static STRUCT_IF_C Ip_BFu7c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_I, Ip_BFu7c_I)
//============================================================================


struct  Ip_BFu7c_Ip  {
  int *v1;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 Ip_BFu7c_Ip) C1{ Fp Fc:7 Fp}



static void Test_Ip_BFu7c_Ip()
{
  {
    init_simple_test("Ip_BFu7c_Ip");
    static STRUCT_IF_C Ip_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Ip, Ip_BFu7c_Ip)
//============================================================================


struct  Ip_BFu7c_L  {
  int *v1;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 Ip_BFu7c_L) C1{ Fp Fc:7 FL}



static void Test_Ip_BFu7c_L()
{
  {
    init_simple_test("Ip_BFu7c_L");
    static STRUCT_IF_C Ip_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_L, Ip_BFu7c_L)
//============================================================================


struct  Ip_BFu7c_S  {
  int *v1;
  unsigned char v2:7;
  short v3;
};
//SIG(1 Ip_BFu7c_S) C1{ Fp Fc:7 Fs}



static void Test_Ip_BFu7c_S()
{
  {
    init_simple_test("Ip_BFu7c_S");
    static STRUCT_IF_C Ip_BFu7c_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_S, Ip_BFu7c_S)
//============================================================================


struct  Ip_BFu7c_Uc  {
  int *v1;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 Ip_BFu7c_Uc) C1{ Fp Fc:7 Fc}



static void Test_Ip_BFu7c_Uc()
{
  {
    init_simple_test("Ip_BFu7c_Uc");
    static STRUCT_IF_C Ip_BFu7c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Uc, Ip_BFu7c_Uc)
//============================================================================


struct  Ip_BFu7c_Ui  {
  int *v1;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 Ip_BFu7c_Ui) C1{ Fp Fc:7 Fi}



static void Test_Ip_BFu7c_Ui()
{
  {
    init_simple_test("Ip_BFu7c_Ui");
    static STRUCT_IF_C Ip_BFu7c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Ui, Ip_BFu7c_Ui)
//============================================================================


struct  Ip_BFu7c_Ul  {
  int *v1;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 Ip_BFu7c_Ul) C1{ Fp Fc:7 FL}



static void Test_Ip_BFu7c_Ul()
{
  {
    init_simple_test("Ip_BFu7c_Ul");
    static STRUCT_IF_C Ip_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Ul, Ip_BFu7c_Ul)
//============================================================================


struct  Ip_BFu7c_Us  {
  int *v1;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 Ip_BFu7c_Us) C1{ Fp Fc:7 Fs}



static void Test_Ip_BFu7c_Us()
{
  {
    init_simple_test("Ip_BFu7c_Us");
    static STRUCT_IF_C Ip_BFu7c_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Us, Ip_BFu7c_Us)
//============================================================================


struct  Ip_BFu7c_Vp  {
  int *v1;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 Ip_BFu7c_Vp) C1{ Fp Fc:7 Fp}



static void Test_Ip_BFu7c_Vp()
{
  {
    init_simple_test("Ip_BFu7c_Vp");
    static STRUCT_IF_C Ip_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_Vp, Ip_BFu7c_Vp)
//============================================================================


struct  Ip_BFu7i  {
  int *v1;
  unsigned int v2:7;
};
//SIG(1 Ip_BFu7i) C1{ Fp Fi:7}



static void Test_Ip_BFu7i()
{
  {
    init_simple_test("Ip_BFu7i");
    static STRUCT_IF_C Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i, Ip_BFu7i)
//============================================================================


struct  Ip_BFu7i_BFu15i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu7i_BFu15i) C1{ Fp Fi:7 Fi:15}



static void Test_Ip_BFu7i_BFu15i()
{
  {
    init_simple_test("Ip_BFu7i_BFu15i");
    static STRUCT_IF_C Ip_BFu7i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu15i, Ip_BFu7i_BFu15i)
//============================================================================


struct  Ip_BFu7i_BFu15ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu7i_BFu15ll) C1{ Fp Fi:7 FL:15}



static void Test_Ip_BFu7i_BFu15ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu15ll");
    static STRUCT_IF_C Ip_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu15ll, Ip_BFu7i_BFu15ll)
//============================================================================


struct  Ip_BFu7i_BFu15s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu7i_BFu15s) C1{ Fp Fi:7 Fs:15}



static void Test_Ip_BFu7i_BFu15s()
{
  {
    init_simple_test("Ip_BFu7i_BFu15s");
    static STRUCT_IF_C Ip_BFu7i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu15s, Ip_BFu7i_BFu15s)
//============================================================================


struct  Ip_BFu7i_BFu16i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu7i_BFu16i) C1{ Fp Fi:7 Fi:16}



static void Test_Ip_BFu7i_BFu16i()
{
  {
    init_simple_test("Ip_BFu7i_BFu16i");
    static STRUCT_IF_C Ip_BFu7i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu16i, Ip_BFu7i_BFu16i)
//============================================================================


struct  Ip_BFu7i_BFu16ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu7i_BFu16ll) C1{ Fp Fi:7 FL:16}



static void Test_Ip_BFu7i_BFu16ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu16ll");
    static STRUCT_IF_C Ip_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu16ll, Ip_BFu7i_BFu16ll)
//============================================================================


struct  Ip_BFu7i_BFu16s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu7i_BFu16s) C1{ Fp Fi:7 Fs:16}



static void Test_Ip_BFu7i_BFu16s()
{
  {
    init_simple_test("Ip_BFu7i_BFu16s");
    static STRUCT_IF_C Ip_BFu7i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu16s, Ip_BFu7i_BFu16s)
//============================================================================


struct  Ip_BFu7i_BFu17i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu7i_BFu17i) C1{ Fp Fi:7 Fi:17}



static void Test_Ip_BFu7i_BFu17i()
{
  {
    init_simple_test("Ip_BFu7i_BFu17i");
    static STRUCT_IF_C Ip_BFu7i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu17i, Ip_BFu7i_BFu17i)
//============================================================================


struct  Ip_BFu7i_BFu17ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu7i_BFu17ll) C1{ Fp Fi:7 FL:17}



static void Test_Ip_BFu7i_BFu17ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu17ll");
    static STRUCT_IF_C Ip_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu17ll, Ip_BFu7i_BFu17ll)
//============================================================================


struct  Ip_BFu7i_BFu1c  {
  int *v1;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu7i_BFu1c) C1{ Fp Fi:7 Fc:1}



static void Test_Ip_BFu7i_BFu1c()
{
  {
    init_simple_test("Ip_BFu7i_BFu1c");
    static STRUCT_IF_C Ip_BFu7i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu1c, Ip_BFu7i_BFu1c)
//============================================================================


struct  Ip_BFu7i_BFu1i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu7i_BFu1i) C1{ Fp Fi:7 Fi:1}



static void Test_Ip_BFu7i_BFu1i()
{
  {
    init_simple_test("Ip_BFu7i_BFu1i");
    static STRUCT_IF_C Ip_BFu7i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu1i, Ip_BFu7i_BFu1i)
//============================================================================


struct  Ip_BFu7i_BFu1ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu7i_BFu1ll) C1{ Fp Fi:7 FL:1}



static void Test_Ip_BFu7i_BFu1ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu1ll");
    static STRUCT_IF_C Ip_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu1ll, Ip_BFu7i_BFu1ll)
//============================================================================


struct  Ip_BFu7i_BFu1s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu7i_BFu1s) C1{ Fp Fi:7 Fs:1}



static void Test_Ip_BFu7i_BFu1s()
{
  {
    init_simple_test("Ip_BFu7i_BFu1s");
    static STRUCT_IF_C Ip_BFu7i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu1s, Ip_BFu7i_BFu1s)
//============================================================================


struct  Ip_BFu7i_BFu31i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu7i_BFu31i) C1{ Fp Fi:7 Fi:31}



static void Test_Ip_BFu7i_BFu31i()
{
  {
    init_simple_test("Ip_BFu7i_BFu31i");
    static STRUCT_IF_C Ip_BFu7i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu31i, Ip_BFu7i_BFu31i)
//============================================================================


struct  Ip_BFu7i_BFu31ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu7i_BFu31ll) C1{ Fp Fi:7 FL:31}



static void Test_Ip_BFu7i_BFu31ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu31ll");
    static STRUCT_IF_C Ip_BFu7i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, 1, "Ip_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, hide_ull(1LL<<30), "Ip_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu31ll, Ip_BFu7i_BFu31ll)
//============================================================================


struct  Ip_BFu7i_BFu32i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu7i_BFu32i) C1{ Fp Fi:7 Fi:32}



static void Test_Ip_BFu7i_BFu32i()
{
  {
    init_simple_test("Ip_BFu7i_BFu32i");
    static STRUCT_IF_C Ip_BFu7i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu32i, Ip_BFu7i_BFu32i)
//============================================================================


struct  Ip_BFu7i_BFu32ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu7i_BFu32ll) C1{ Fp Fi:7 FL:32}



static void Test_Ip_BFu7i_BFu32ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu32ll");
    static STRUCT_IF_C Ip_BFu7i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, 1, "Ip_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, hide_ull(1LL<<31), "Ip_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu32ll, Ip_BFu7i_BFu32ll)
//============================================================================


struct  Ip_BFu7i_BFu33  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu7i_BFu33) C1{ Fp Fi:7 FL:33}



static void Test_Ip_BFu7i_BFu33()
{
  {
    init_simple_test("Ip_BFu7i_BFu33");
    static STRUCT_IF_C Ip_BFu7i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, 1, "Ip_BFu7i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, hide_ull(1LL<<32), "Ip_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu33, Ip_BFu7i_BFu33)
//============================================================================


struct  Ip_BFu7i_BFu7c  {
  int *v1;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu7i_BFu7c) C1{ Fp Fi:7 Fc:7}



static void Test_Ip_BFu7i_BFu7c()
{
  {
    init_simple_test("Ip_BFu7i_BFu7c");
    static STRUCT_IF_C Ip_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu7c, Ip_BFu7i_BFu7c)
//============================================================================


struct  Ip_BFu7i_BFu7i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu7i_BFu7i) C1{ Fp Fi:7 Fi:7}



static void Test_Ip_BFu7i_BFu7i()
{
  {
    init_simple_test("Ip_BFu7i_BFu7i");
    static STRUCT_IF_C Ip_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu7i, Ip_BFu7i_BFu7i)
//============================================================================


struct  Ip_BFu7i_BFu7ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu7i_BFu7ll) C1{ Fp Fi:7 FL:7}



static void Test_Ip_BFu7i_BFu7ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu7ll");
    static STRUCT_IF_C Ip_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu7ll, Ip_BFu7i_BFu7ll)
//============================================================================


struct  Ip_BFu7i_BFu7s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu7i_BFu7s) C1{ Fp Fi:7 Fs:7}



static void Test_Ip_BFu7i_BFu7s()
{
  {
    init_simple_test("Ip_BFu7i_BFu7s");
    static STRUCT_IF_C Ip_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu7s, Ip_BFu7i_BFu7s)
//============================================================================


struct  Ip_BFu7i_BFu8c  {
  int *v1;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu7i_BFu8c) C1{ Fp Fi:7 Fc:8}



static void Test_Ip_BFu7i_BFu8c()
{
  {
    init_simple_test("Ip_BFu7i_BFu8c");
    static STRUCT_IF_C Ip_BFu7i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu8c, Ip_BFu7i_BFu8c)
//============================================================================


struct  Ip_BFu7i_BFu8i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu7i_BFu8i) C1{ Fp Fi:7 Fi:8}



static void Test_Ip_BFu7i_BFu8i()
{
  {
    init_simple_test("Ip_BFu7i_BFu8i");
    static STRUCT_IF_C Ip_BFu7i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu8i, Ip_BFu7i_BFu8i)
//============================================================================


struct  Ip_BFu7i_BFu8ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu7i_BFu8ll) C1{ Fp Fi:7 FL:8}



static void Test_Ip_BFu7i_BFu8ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu8ll");
    static STRUCT_IF_C Ip_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu8ll, Ip_BFu7i_BFu8ll)
//============================================================================


struct  Ip_BFu7i_BFu8s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu7i_BFu8s) C1{ Fp Fi:7 Fs:8}



static void Test_Ip_BFu7i_BFu8s()
{
  {
    init_simple_test("Ip_BFu7i_BFu8s");
    static STRUCT_IF_C Ip_BFu7i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu8s, Ip_BFu7i_BFu8s)
//============================================================================


struct  Ip_BFu7i_BFu9i  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu7i_BFu9i) C1{ Fp Fi:7 Fi:9}



static void Test_Ip_BFu7i_BFu9i()
{
  {
    init_simple_test("Ip_BFu7i_BFu9i");
    static STRUCT_IF_C Ip_BFu7i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu9i, Ip_BFu7i_BFu9i)
//============================================================================


struct  Ip_BFu7i_BFu9ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu7i_BFu9ll) C1{ Fp Fi:7 FL:9}



static void Test_Ip_BFu7i_BFu9ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu9ll");
    static STRUCT_IF_C Ip_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu9ll, Ip_BFu7i_BFu9ll)
//============================================================================


struct  Ip_BFu7i_BFu9s  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu7i_BFu9s) C1{ Fp Fi:7 Fs:9}



static void Test_Ip_BFu7i_BFu9s()
{
  {
    init_simple_test("Ip_BFu7i_BFu9s");
    static STRUCT_IF_C Ip_BFu7i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu9s, Ip_BFu7i_BFu9s)
//============================================================================


struct  Ip_BFu7i_C  {
  int *v1;
  unsigned int v2:7;
  char v3;
};
//SIG(1 Ip_BFu7i_C) C1{ Fp Fi:7 Fc}



static void Test_Ip_BFu7i_C()
{
  {
    init_simple_test("Ip_BFu7i_C");
    static STRUCT_IF_C Ip_BFu7i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_C, Ip_BFu7i_C)
//============================================================================


struct  Ip_BFu7i_D  {
  int *v1;
  unsigned int v2:7;
  double v3;
};
//SIG(1 Ip_BFu7i_D) C1{ Fp Fi:7 FL}



static void Test_Ip_BFu7i_D()
{
  {
    init_simple_test("Ip_BFu7i_D");
    static STRUCT_IF_C Ip_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_D, Ip_BFu7i_D)
//============================================================================


struct  Ip_BFu7i_F  {
  int *v1;
  unsigned int v2:7;
  float v3;
};
//SIG(1 Ip_BFu7i_F) C1{ Fp Fi:7 Fi}



static void Test_Ip_BFu7i_F()
{
  {
    init_simple_test("Ip_BFu7i_F");
    static STRUCT_IF_C Ip_BFu7i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_F, Ip_BFu7i_F)
//============================================================================


struct  Ip_BFu7i_I  {
  int *v1;
  unsigned int v2:7;
  int v3;
};
//SIG(1 Ip_BFu7i_I) C1{ Fp Fi:7 Fi}



static void Test_Ip_BFu7i_I()
{
  {
    init_simple_test("Ip_BFu7i_I");
    static STRUCT_IF_C Ip_BFu7i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_I, Ip_BFu7i_I)
//============================================================================


struct  Ip_BFu7i_Ip  {
  int *v1;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 Ip_BFu7i_Ip) C1{ Fp Fi:7 Fp}



static void Test_Ip_BFu7i_Ip()
{
  {
    init_simple_test("Ip_BFu7i_Ip");
    static STRUCT_IF_C Ip_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Ip, Ip_BFu7i_Ip)
//============================================================================


struct  Ip_BFu7i_L  {
  int *v1;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 Ip_BFu7i_L) C1{ Fp Fi:7 FL}



static void Test_Ip_BFu7i_L()
{
  {
    init_simple_test("Ip_BFu7i_L");
    static STRUCT_IF_C Ip_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_L, Ip_BFu7i_L)
//============================================================================


struct  Ip_BFu7i_S  {
  int *v1;
  unsigned int v2:7;
  short v3;
};
//SIG(1 Ip_BFu7i_S) C1{ Fp Fi:7 Fs}



static void Test_Ip_BFu7i_S()
{
  {
    init_simple_test("Ip_BFu7i_S");
    static STRUCT_IF_C Ip_BFu7i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_S, Ip_BFu7i_S)
//============================================================================


struct  Ip_BFu7i_Uc  {
  int *v1;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 Ip_BFu7i_Uc) C1{ Fp Fi:7 Fc}



static void Test_Ip_BFu7i_Uc()
{
  {
    init_simple_test("Ip_BFu7i_Uc");
    static STRUCT_IF_C Ip_BFu7i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Uc, Ip_BFu7i_Uc)
//============================================================================


struct  Ip_BFu7i_Ui  {
  int *v1;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 Ip_BFu7i_Ui) C1{ Fp Fi:7 Fi}



static void Test_Ip_BFu7i_Ui()
{
  {
    init_simple_test("Ip_BFu7i_Ui");
    static STRUCT_IF_C Ip_BFu7i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Ui, Ip_BFu7i_Ui)
//============================================================================


struct  Ip_BFu7i_Ul  {
  int *v1;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 Ip_BFu7i_Ul) C1{ Fp Fi:7 FL}



static void Test_Ip_BFu7i_Ul()
{
  {
    init_simple_test("Ip_BFu7i_Ul");
    static STRUCT_IF_C Ip_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Ul, Ip_BFu7i_Ul)
//============================================================================


struct  Ip_BFu7i_Us  {
  int *v1;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 Ip_BFu7i_Us) C1{ Fp Fi:7 Fs}



static void Test_Ip_BFu7i_Us()
{
  {
    init_simple_test("Ip_BFu7i_Us");
    static STRUCT_IF_C Ip_BFu7i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Us, Ip_BFu7i_Us)
//============================================================================


struct  Ip_BFu7i_Vp  {
  int *v1;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 Ip_BFu7i_Vp) C1{ Fp Fi:7 Fp}



static void Test_Ip_BFu7i_Vp()
{
  {
    init_simple_test("Ip_BFu7i_Vp");
    static STRUCT_IF_C Ip_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_Vp, Ip_BFu7i_Vp)
//============================================================================


struct  Ip_BFu7ll  {
  int *v1;
  __tsu64 v2:7;
};
//SIG(1 Ip_BFu7ll) C1{ Fp FL:7}



static void Test_Ip_BFu7ll()
{
  {
    init_simple_test("Ip_BFu7ll");
    static STRUCT_IF_C Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll, Ip_BFu7ll)
//============================================================================


struct  Ip_BFu7ll_BFu15i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu7ll_BFu15i) C1{ Fp FL:7 Fi:15}



static void Test_Ip_BFu7ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu15i");
    static STRUCT_IF_C Ip_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu15i, Ip_BFu7ll_BFu15i)
//============================================================================


struct  Ip_BFu7ll_BFu15ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu7ll_BFu15ll) C1{ Fp FL:7 FL:15}



static void Test_Ip_BFu7ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu15ll, Ip_BFu7ll_BFu15ll)
//============================================================================


struct  Ip_BFu7ll_BFu15s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu7ll_BFu15s) C1{ Fp FL:7 Fs:15}



static void Test_Ip_BFu7ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu15s");
    static STRUCT_IF_C Ip_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu15s, Ip_BFu7ll_BFu15s)
//============================================================================


struct  Ip_BFu7ll_BFu16i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu7ll_BFu16i) C1{ Fp FL:7 Fi:16}



static void Test_Ip_BFu7ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu16i");
    static STRUCT_IF_C Ip_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu16i, Ip_BFu7ll_BFu16i)
//============================================================================


struct  Ip_BFu7ll_BFu16ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu7ll_BFu16ll) C1{ Fp FL:7 FL:16}



static void Test_Ip_BFu7ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu16ll, Ip_BFu7ll_BFu16ll)
//============================================================================


struct  Ip_BFu7ll_BFu16s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu7ll_BFu16s) C1{ Fp FL:7 Fs:16}



static void Test_Ip_BFu7ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu16s");
    static STRUCT_IF_C Ip_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu16s, Ip_BFu7ll_BFu16s)
//============================================================================


struct  Ip_BFu7ll_BFu17i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu7ll_BFu17i) C1{ Fp FL:7 Fi:17}



static void Test_Ip_BFu7ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu17i");
    static STRUCT_IF_C Ip_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu17i, Ip_BFu7ll_BFu17i)
//============================================================================


struct  Ip_BFu7ll_BFu17ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu7ll_BFu17ll) C1{ Fp FL:7 FL:17}



static void Test_Ip_BFu7ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu17ll, Ip_BFu7ll_BFu17ll)
//============================================================================


struct  Ip_BFu7ll_BFu1c  {
  int *v1;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu7ll_BFu1c) C1{ Fp FL:7 Fc:1}



static void Test_Ip_BFu7ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu7ll_BFu1c");
    static STRUCT_IF_C Ip_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu1c, Ip_BFu7ll_BFu1c)
//============================================================================


struct  Ip_BFu7ll_BFu1i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu7ll_BFu1i) C1{ Fp FL:7 Fi:1}



static void Test_Ip_BFu7ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu1i");
    static STRUCT_IF_C Ip_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu1i, Ip_BFu7ll_BFu1i)
//============================================================================


struct  Ip_BFu7ll_BFu1ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu7ll_BFu1ll) C1{ Fp FL:7 FL:1}



static void Test_Ip_BFu7ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu1ll, Ip_BFu7ll_BFu1ll)
//============================================================================


struct  Ip_BFu7ll_BFu1s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu7ll_BFu1s) C1{ Fp FL:7 Fs:1}



static void Test_Ip_BFu7ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu1s");
    static STRUCT_IF_C Ip_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu1s, Ip_BFu7ll_BFu1s)
//============================================================================


struct  Ip_BFu7ll_BFu31i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu7ll_BFu31i) C1{ Fp FL:7 Fi:31}



static void Test_Ip_BFu7ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu31i");
    static STRUCT_IF_C Ip_BFu7ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu31i, Ip_BFu7ll_BFu31i)
//============================================================================


struct  Ip_BFu7ll_BFu31ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu7ll_BFu31ll) C1{ Fp FL:7 FL:31}



static void Test_Ip_BFu7ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, 1, "Ip_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, hide_ull(1LL<<30), "Ip_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu31ll, Ip_BFu7ll_BFu31ll)
//============================================================================


struct  Ip_BFu7ll_BFu32i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu7ll_BFu32i) C1{ Fp FL:7 Fi:32}



static void Test_Ip_BFu7ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu32i");
    static STRUCT_IF_C Ip_BFu7ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu32i, Ip_BFu7ll_BFu32i)
//============================================================================


struct  Ip_BFu7ll_BFu32ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu7ll_BFu32ll) C1{ Fp FL:7 FL:32}



static void Test_Ip_BFu7ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, 1, "Ip_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, hide_ull(1LL<<31), "Ip_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu32ll, Ip_BFu7ll_BFu32ll)
//============================================================================


struct  Ip_BFu7ll_BFu33  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu7ll_BFu33) C1{ Fp FL:7 FL:33}



static void Test_Ip_BFu7ll_BFu33()
{
  {
    init_simple_test("Ip_BFu7ll_BFu33");
    static STRUCT_IF_C Ip_BFu7ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, 1, "Ip_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, hide_ull(1LL<<32), "Ip_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu33, Ip_BFu7ll_BFu33)
//============================================================================


struct  Ip_BFu7ll_BFu7c  {
  int *v1;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu7ll_BFu7c) C1{ Fp FL:7 Fc:7}



static void Test_Ip_BFu7ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu7ll_BFu7c");
    static STRUCT_IF_C Ip_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu7c, Ip_BFu7ll_BFu7c)
//============================================================================


struct  Ip_BFu7ll_BFu7i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu7ll_BFu7i) C1{ Fp FL:7 Fi:7}



static void Test_Ip_BFu7ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu7i");
    static STRUCT_IF_C Ip_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu7i, Ip_BFu7ll_BFu7i)
//============================================================================


struct  Ip_BFu7ll_BFu7ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu7ll_BFu7ll) C1{ Fp FL:7 FL:7}



static void Test_Ip_BFu7ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu7ll, Ip_BFu7ll_BFu7ll)
//============================================================================


struct  Ip_BFu7ll_BFu7s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu7ll_BFu7s) C1{ Fp FL:7 Fs:7}



static void Test_Ip_BFu7ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu7s");
    static STRUCT_IF_C Ip_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu7s, Ip_BFu7ll_BFu7s)
//============================================================================


struct  Ip_BFu7ll_BFu8c  {
  int *v1;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu7ll_BFu8c) C1{ Fp FL:7 Fc:8}



static void Test_Ip_BFu7ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu7ll_BFu8c");
    static STRUCT_IF_C Ip_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu8c, Ip_BFu7ll_BFu8c)
//============================================================================


struct  Ip_BFu7ll_BFu8i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu7ll_BFu8i) C1{ Fp FL:7 Fi:8}



static void Test_Ip_BFu7ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu8i");
    static STRUCT_IF_C Ip_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu8i, Ip_BFu7ll_BFu8i)
//============================================================================


struct  Ip_BFu7ll_BFu8ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu7ll_BFu8ll) C1{ Fp FL:7 FL:8}



static void Test_Ip_BFu7ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu8ll, Ip_BFu7ll_BFu8ll)
//============================================================================


struct  Ip_BFu7ll_BFu8s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu7ll_BFu8s) C1{ Fp FL:7 Fs:8}



static void Test_Ip_BFu7ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu8s");
    static STRUCT_IF_C Ip_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu8s, Ip_BFu7ll_BFu8s)
//============================================================================


struct  Ip_BFu7ll_BFu9i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu7ll_BFu9i) C1{ Fp FL:7 Fi:9}



static void Test_Ip_BFu7ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu9i");
    static STRUCT_IF_C Ip_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu9i, Ip_BFu7ll_BFu9i)
//============================================================================


struct  Ip_BFu7ll_BFu9ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu7ll_BFu9ll) C1{ Fp FL:7 FL:9}



static void Test_Ip_BFu7ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu9ll, Ip_BFu7ll_BFu9ll)
//============================================================================


struct  Ip_BFu7ll_BFu9s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu7ll_BFu9s) C1{ Fp FL:7 Fs:9}



static void Test_Ip_BFu7ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu9s");
    static STRUCT_IF_C Ip_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu9s, Ip_BFu7ll_BFu9s)
//============================================================================


struct  Ip_BFu7ll_C  {
  int *v1;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 Ip_BFu7ll_C) C1{ Fp FL:7 Fc}



static void Test_Ip_BFu7ll_C()
{
  {
    init_simple_test("Ip_BFu7ll_C");
    static STRUCT_IF_C Ip_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_C, Ip_BFu7ll_C)
//============================================================================


struct  Ip_BFu7ll_D  {
  int *v1;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 Ip_BFu7ll_D) C1{ Fp FL:7 FL}



static void Test_Ip_BFu7ll_D()
{
  {
    init_simple_test("Ip_BFu7ll_D");
    static STRUCT_IF_C Ip_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_D, Ip_BFu7ll_D)
//============================================================================


struct  Ip_BFu7ll_F  {
  int *v1;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 Ip_BFu7ll_F) C1{ Fp FL:7 Fi}



static void Test_Ip_BFu7ll_F()
{
  {
    init_simple_test("Ip_BFu7ll_F");
    static STRUCT_IF_C Ip_BFu7ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_F, Ip_BFu7ll_F)
//============================================================================


struct  Ip_BFu7ll_I  {
  int *v1;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 Ip_BFu7ll_I) C1{ Fp FL:7 Fi}



static void Test_Ip_BFu7ll_I()
{
  {
    init_simple_test("Ip_BFu7ll_I");
    static STRUCT_IF_C Ip_BFu7ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_I, Ip_BFu7ll_I)
//============================================================================


struct  Ip_BFu7ll_Ip  {
  int *v1;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 Ip_BFu7ll_Ip) C1{ Fp FL:7 Fp}



static void Test_Ip_BFu7ll_Ip()
{
  {
    init_simple_test("Ip_BFu7ll_Ip");
    static STRUCT_IF_C Ip_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Ip, Ip_BFu7ll_Ip)
//============================================================================


struct  Ip_BFu7ll_L  {
  int *v1;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 Ip_BFu7ll_L) C1{ Fp FL:7 FL}



static void Test_Ip_BFu7ll_L()
{
  {
    init_simple_test("Ip_BFu7ll_L");
    static STRUCT_IF_C Ip_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_L, Ip_BFu7ll_L)
//============================================================================


struct  Ip_BFu7ll_S  {
  int *v1;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 Ip_BFu7ll_S) C1{ Fp FL:7 Fs}



static void Test_Ip_BFu7ll_S()
{
  {
    init_simple_test("Ip_BFu7ll_S");
    static STRUCT_IF_C Ip_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_S, Ip_BFu7ll_S)
//============================================================================


struct  Ip_BFu7ll_Uc  {
  int *v1;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 Ip_BFu7ll_Uc) C1{ Fp FL:7 Fc}



static void Test_Ip_BFu7ll_Uc()
{
  {
    init_simple_test("Ip_BFu7ll_Uc");
    static STRUCT_IF_C Ip_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Uc, Ip_BFu7ll_Uc)
//============================================================================


struct  Ip_BFu7ll_Ui  {
  int *v1;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 Ip_BFu7ll_Ui) C1{ Fp FL:7 Fi}



static void Test_Ip_BFu7ll_Ui()
{
  {
    init_simple_test("Ip_BFu7ll_Ui");
    static STRUCT_IF_C Ip_BFu7ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Ui, Ip_BFu7ll_Ui)
//============================================================================


struct  Ip_BFu7ll_Ul  {
  int *v1;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 Ip_BFu7ll_Ul) C1{ Fp FL:7 FL}



static void Test_Ip_BFu7ll_Ul()
{
  {
    init_simple_test("Ip_BFu7ll_Ul");
    static STRUCT_IF_C Ip_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Ul, Ip_BFu7ll_Ul)
//============================================================================


struct  Ip_BFu7ll_Us  {
  int *v1;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 Ip_BFu7ll_Us) C1{ Fp FL:7 Fs}



static void Test_Ip_BFu7ll_Us()
{
  {
    init_simple_test("Ip_BFu7ll_Us");
    static STRUCT_IF_C Ip_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Us, Ip_BFu7ll_Us)
//============================================================================


struct  Ip_BFu7ll_Vp  {
  int *v1;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 Ip_BFu7ll_Vp) C1{ Fp FL:7 Fp}



static void Test_Ip_BFu7ll_Vp()
{
  {
    init_simple_test("Ip_BFu7ll_Vp");
    static STRUCT_IF_C Ip_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_Vp, Ip_BFu7ll_Vp)
//============================================================================


struct  Ip_BFu7s  {
  int *v1;
  unsigned short v2:7;
};
//SIG(1 Ip_BFu7s) C1{ Fp Fs:7}



static void Test_Ip_BFu7s()
{
  {
    init_simple_test("Ip_BFu7s");
    static STRUCT_IF_C Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s, Ip_BFu7s)
//============================================================================


struct  Ip_BFu7s_BFu15i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu7s_BFu15i) C1{ Fp Fs:7 Fi:15}



static void Test_Ip_BFu7s_BFu15i()
{
  {
    init_simple_test("Ip_BFu7s_BFu15i");
    static STRUCT_IF_C Ip_BFu7s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu15i, Ip_BFu7s_BFu15i)
//============================================================================


struct  Ip_BFu7s_BFu15ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu7s_BFu15ll) C1{ Fp Fs:7 FL:15}



static void Test_Ip_BFu7s_BFu15ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu15ll");
    static STRUCT_IF_C Ip_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, 1, "Ip_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 15, hide_ull(1LL<<14), "Ip_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu15ll, Ip_BFu7s_BFu15ll)
//============================================================================


struct  Ip_BFu7s_BFu15s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu7s_BFu15s) C1{ Fp Fs:7 Fs:15}



static void Test_Ip_BFu7s_BFu15s()
{
  {
    init_simple_test("Ip_BFu7s_BFu15s");
    static STRUCT_IF_C Ip_BFu7s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu15s, Ip_BFu7s_BFu15s)
//============================================================================


struct  Ip_BFu7s_BFu16i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu7s_BFu16i) C1{ Fp Fs:7 Fi:16}



static void Test_Ip_BFu7s_BFu16i()
{
  {
    init_simple_test("Ip_BFu7s_BFu16i");
    static STRUCT_IF_C Ip_BFu7s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu16i, Ip_BFu7s_BFu16i)
//============================================================================


struct  Ip_BFu7s_BFu16ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu7s_BFu16ll) C1{ Fp Fs:7 FL:16}



static void Test_Ip_BFu7s_BFu16ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu16ll");
    static STRUCT_IF_C Ip_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, 1, "Ip_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 16, hide_ull(1LL<<15), "Ip_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu16ll, Ip_BFu7s_BFu16ll)
//============================================================================


struct  Ip_BFu7s_BFu16s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu7s_BFu16s) C1{ Fp Fs:7 Fs:16}



static void Test_Ip_BFu7s_BFu16s()
{
  {
    init_simple_test("Ip_BFu7s_BFu16s");
    static STRUCT_IF_C Ip_BFu7s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu16s, Ip_BFu7s_BFu16s)
//============================================================================


struct  Ip_BFu7s_BFu17i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu7s_BFu17i) C1{ Fp Fs:7 Fi:17}



static void Test_Ip_BFu7s_BFu17i()
{
  {
    init_simple_test("Ip_BFu7s_BFu17i");
    static STRUCT_IF_C Ip_BFu7s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu17i, Ip_BFu7s_BFu17i)
//============================================================================


struct  Ip_BFu7s_BFu17ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu7s_BFu17ll) C1{ Fp Fs:7 FL:17}



static void Test_Ip_BFu7s_BFu17ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu17ll");
    static STRUCT_IF_C Ip_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, 1, "Ip_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 17, hide_ull(1LL<<16), "Ip_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu17ll, Ip_BFu7s_BFu17ll)
//============================================================================


struct  Ip_BFu7s_BFu1c  {
  int *v1;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu7s_BFu1c) C1{ Fp Fs:7 Fc:1}



static void Test_Ip_BFu7s_BFu1c()
{
  {
    init_simple_test("Ip_BFu7s_BFu1c");
    static STRUCT_IF_C Ip_BFu7s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu1c, Ip_BFu7s_BFu1c)
//============================================================================


struct  Ip_BFu7s_BFu1i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu7s_BFu1i) C1{ Fp Fs:7 Fi:1}



static void Test_Ip_BFu7s_BFu1i()
{
  {
    init_simple_test("Ip_BFu7s_BFu1i");
    static STRUCT_IF_C Ip_BFu7s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu1i, Ip_BFu7s_BFu1i)
//============================================================================


struct  Ip_BFu7s_BFu1ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu7s_BFu1ll) C1{ Fp Fs:7 FL:1}



static void Test_Ip_BFu7s_BFu1ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu1ll");
    static STRUCT_IF_C Ip_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu1ll, Ip_BFu7s_BFu1ll)
//============================================================================


struct  Ip_BFu7s_BFu1s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu7s_BFu1s) C1{ Fp Fs:7 Fs:1}



static void Test_Ip_BFu7s_BFu1s()
{
  {
    init_simple_test("Ip_BFu7s_BFu1s");
    static STRUCT_IF_C Ip_BFu7s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 1, 1, "Ip_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu1s, Ip_BFu7s_BFu1s)
//============================================================================


struct  Ip_BFu7s_BFu31i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu7s_BFu31i) C1{ Fp Fs:7 Fi:31}



static void Test_Ip_BFu7s_BFu31i()
{
  {
    init_simple_test("Ip_BFu7s_BFu31i");
    static STRUCT_IF_C Ip_BFu7s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu31i, Ip_BFu7s_BFu31i)
//============================================================================


struct  Ip_BFu7s_BFu31ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu7s_BFu31ll) C1{ Fp Fs:7 FL:31}



static void Test_Ip_BFu7s_BFu31ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu31ll");
    static STRUCT_IF_C Ip_BFu7s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, 1, "Ip_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 31, hide_ull(1LL<<30), "Ip_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu31ll, Ip_BFu7s_BFu31ll)
//============================================================================


struct  Ip_BFu7s_BFu32i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu7s_BFu32i) C1{ Fp Fs:7 Fi:32}



static void Test_Ip_BFu7s_BFu32i()
{
  {
    init_simple_test("Ip_BFu7s_BFu32i");
    static STRUCT_IF_C Ip_BFu7s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu32i, Ip_BFu7s_BFu32i)
//============================================================================


struct  Ip_BFu7s_BFu32ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu7s_BFu32ll) C1{ Fp Fs:7 FL:32}



static void Test_Ip_BFu7s_BFu32ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu32ll");
    static STRUCT_IF_C Ip_BFu7s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, 1, "Ip_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 32, hide_ull(1LL<<31), "Ip_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu32ll, Ip_BFu7s_BFu32ll)
//============================================================================


struct  Ip_BFu7s_BFu33  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu7s_BFu33) C1{ Fp Fs:7 FL:33}



static void Test_Ip_BFu7s_BFu33()
{
  {
    init_simple_test("Ip_BFu7s_BFu33");
    static STRUCT_IF_C Ip_BFu7s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, 1, "Ip_BFu7s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(7,7), 33, hide_ull(1LL<<32), "Ip_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu33, Ip_BFu7s_BFu33)
//============================================================================


struct  Ip_BFu7s_BFu7c  {
  int *v1;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu7s_BFu7c) C1{ Fp Fs:7 Fc:7}



static void Test_Ip_BFu7s_BFu7c()
{
  {
    init_simple_test("Ip_BFu7s_BFu7c");
    static STRUCT_IF_C Ip_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu7c, Ip_BFu7s_BFu7c)
//============================================================================


struct  Ip_BFu7s_BFu7i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu7s_BFu7i) C1{ Fp Fs:7 Fi:7}



static void Test_Ip_BFu7s_BFu7i()
{
  {
    init_simple_test("Ip_BFu7s_BFu7i");
    static STRUCT_IF_C Ip_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu7i, Ip_BFu7s_BFu7i)
//============================================================================


struct  Ip_BFu7s_BFu7ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu7s_BFu7ll) C1{ Fp Fs:7 FL:7}



static void Test_Ip_BFu7s_BFu7ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu7ll");
    static STRUCT_IF_C Ip_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu7ll, Ip_BFu7s_BFu7ll)
//============================================================================


struct  Ip_BFu7s_BFu7s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu7s_BFu7s) C1{ Fp Fs:7 Fs:7}



static void Test_Ip_BFu7s_BFu7s()
{
  {
    init_simple_test("Ip_BFu7s_BFu7s");
    static STRUCT_IF_C Ip_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, 1, "Ip_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu7s, Ip_BFu7s_BFu7s)
//============================================================================


struct  Ip_BFu7s_BFu8c  {
  int *v1;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu7s_BFu8c) C1{ Fp Fs:7 Fc:8}



static void Test_Ip_BFu7s_BFu8c()
{
  {
    init_simple_test("Ip_BFu7s_BFu8c");
    static STRUCT_IF_C Ip_BFu7s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu8c, Ip_BFu7s_BFu8c)
//============================================================================


struct  Ip_BFu7s_BFu8i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu7s_BFu8i) C1{ Fp Fs:7 Fi:8}



static void Test_Ip_BFu7s_BFu8i()
{
  {
    init_simple_test("Ip_BFu7s_BFu8i");
    static STRUCT_IF_C Ip_BFu7s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu8i, Ip_BFu7s_BFu8i)
//============================================================================


struct  Ip_BFu7s_BFu8ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu7s_BFu8ll) C1{ Fp Fs:7 FL:8}



static void Test_Ip_BFu7s_BFu8ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu8ll");
    static STRUCT_IF_C Ip_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu8ll, Ip_BFu7s_BFu8ll)
//============================================================================


struct  Ip_BFu7s_BFu8s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu7s_BFu8s) C1{ Fp Fs:7 Fs:8}



static void Test_Ip_BFu7s_BFu8s()
{
  {
    init_simple_test("Ip_BFu7s_BFu8s");
    static STRUCT_IF_C Ip_BFu7s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, 1, "Ip_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 8, hide_ull(1LL<<7), "Ip_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu8s, Ip_BFu7s_BFu8s)
//============================================================================


struct  Ip_BFu7s_BFu9i  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu7s_BFu9i) C1{ Fp Fs:7 Fi:9}



static void Test_Ip_BFu7s_BFu9i()
{
  {
    init_simple_test("Ip_BFu7s_BFu9i");
    static STRUCT_IF_C Ip_BFu7s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu9i, Ip_BFu7s_BFu9i)
//============================================================================


struct  Ip_BFu7s_BFu9ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu7s_BFu9ll) C1{ Fp Fs:7 FL:9}



static void Test_Ip_BFu7s_BFu9ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu9ll");
    static STRUCT_IF_C Ip_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu9ll, Ip_BFu7s_BFu9ll)
//============================================================================


struct  Ip_BFu7s_BFu9s  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu7s_BFu9s) C1{ Fp Fs:7 Fs:9}



static void Test_Ip_BFu7s_BFu9s()
{
  {
    init_simple_test("Ip_BFu7s_BFu9s");
    static STRUCT_IF_C Ip_BFu7s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, 1, "Ip_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 7, 9, hide_ull(1LL<<8), "Ip_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu9s, Ip_BFu7s_BFu9s)
//============================================================================


struct  Ip_BFu7s_C  {
  int *v1;
  unsigned short v2:7;
  char v3;
};
//SIG(1 Ip_BFu7s_C) C1{ Fp Fs:7 Fc}



static void Test_Ip_BFu7s_C()
{
  {
    init_simple_test("Ip_BFu7s_C");
    static STRUCT_IF_C Ip_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_C, Ip_BFu7s_C)
//============================================================================


struct  Ip_BFu7s_D  {
  int *v1;
  unsigned short v2:7;
  double v3;
};
//SIG(1 Ip_BFu7s_D) C1{ Fp Fs:7 FL}



static void Test_Ip_BFu7s_D()
{
  {
    init_simple_test("Ip_BFu7s_D");
    static STRUCT_IF_C Ip_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_D, Ip_BFu7s_D)
//============================================================================


struct  Ip_BFu7s_F  {
  int *v1;
  unsigned short v2:7;
  float v3;
};
//SIG(1 Ip_BFu7s_F) C1{ Fp Fs:7 Fi}



static void Test_Ip_BFu7s_F()
{
  {
    init_simple_test("Ip_BFu7s_F");
    static STRUCT_IF_C Ip_BFu7s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_F, Ip_BFu7s_F)
//============================================================================


struct  Ip_BFu7s_I  {
  int *v1;
  unsigned short v2:7;
  int v3;
};
//SIG(1 Ip_BFu7s_I) C1{ Fp Fs:7 Fi}



static void Test_Ip_BFu7s_I()
{
  {
    init_simple_test("Ip_BFu7s_I");
    static STRUCT_IF_C Ip_BFu7s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_I, Ip_BFu7s_I)
//============================================================================


struct  Ip_BFu7s_Ip  {
  int *v1;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 Ip_BFu7s_Ip) C1{ Fp Fs:7 Fp}



static void Test_Ip_BFu7s_Ip()
{
  {
    init_simple_test("Ip_BFu7s_Ip");
    static STRUCT_IF_C Ip_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Ip, Ip_BFu7s_Ip)
//============================================================================


struct  Ip_BFu7s_L  {
  int *v1;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 Ip_BFu7s_L) C1{ Fp Fs:7 FL}



static void Test_Ip_BFu7s_L()
{
  {
    init_simple_test("Ip_BFu7s_L");
    static STRUCT_IF_C Ip_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_L, Ip_BFu7s_L)
//============================================================================


struct  Ip_BFu7s_S  {
  int *v1;
  unsigned short v2:7;
  short v3;
};
//SIG(1 Ip_BFu7s_S) C1{ Fp Fs:7 Fs}



static void Test_Ip_BFu7s_S()
{
  {
    init_simple_test("Ip_BFu7s_S");
    static STRUCT_IF_C Ip_BFu7s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_S, Ip_BFu7s_S)
//============================================================================


struct  Ip_BFu7s_Uc  {
  int *v1;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 Ip_BFu7s_Uc) C1{ Fp Fs:7 Fc}



static void Test_Ip_BFu7s_Uc()
{
  {
    init_simple_test("Ip_BFu7s_Uc");
    static STRUCT_IF_C Ip_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Uc, Ip_BFu7s_Uc)
//============================================================================


struct  Ip_BFu7s_Ui  {
  int *v1;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 Ip_BFu7s_Ui) C1{ Fp Fs:7 Fi}



static void Test_Ip_BFu7s_Ui()
{
  {
    init_simple_test("Ip_BFu7s_Ui");
    static STRUCT_IF_C Ip_BFu7s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu7s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Ui, Ip_BFu7s_Ui)
//============================================================================


struct  Ip_BFu7s_Ul  {
  int *v1;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 Ip_BFu7s_Ul) C1{ Fp Fs:7 FL}



static void Test_Ip_BFu7s_Ul()
{
  {
    init_simple_test("Ip_BFu7s_Ul");
    static STRUCT_IF_C Ip_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Ul, Ip_BFu7s_Ul)
//============================================================================


struct  Ip_BFu7s_Us  {
  int *v1;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 Ip_BFu7s_Us) C1{ Fp Fs:7 Fs}



static void Test_Ip_BFu7s_Us()
{
  {
    init_simple_test("Ip_BFu7s_Us");
    static STRUCT_IF_C Ip_BFu7s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Us, Ip_BFu7s_Us)
//============================================================================


struct  Ip_BFu7s_Vp  {
  int *v1;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 Ip_BFu7s_Vp) C1{ Fp Fs:7 Fp}



static void Test_Ip_BFu7s_Vp()
{
  {
    init_simple_test("Ip_BFu7s_Vp");
    static STRUCT_IF_C Ip_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_Vp, Ip_BFu7s_Vp)
//============================================================================


struct  Ip_BFu8c  {
  int *v1;
  unsigned char v2:8;
};
//SIG(1 Ip_BFu8c) C1{ Fp Fc:8}



static void Test_Ip_BFu8c()
{
  {
    init_simple_test("Ip_BFu8c");
    static STRUCT_IF_C Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c, Ip_BFu8c)
//============================================================================


struct  Ip_BFu8c_BFu15i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu8c_BFu15i) C1{ Fp Fc:8 Fi:15}



static void Test_Ip_BFu8c_BFu15i()
{
  {
    init_simple_test("Ip_BFu8c_BFu15i");
    static STRUCT_IF_C Ip_BFu8c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu15i, Ip_BFu8c_BFu15i)
//============================================================================


struct  Ip_BFu8c_BFu15ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu8c_BFu15ll) C1{ Fp Fc:8 FL:15}



static void Test_Ip_BFu8c_BFu15ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu15ll");
    static STRUCT_IF_C Ip_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu15ll, Ip_BFu8c_BFu15ll)
//============================================================================


struct  Ip_BFu8c_BFu15s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu8c_BFu15s) C1{ Fp Fc:8 Fs:15}



static void Test_Ip_BFu8c_BFu15s()
{
  {
    init_simple_test("Ip_BFu8c_BFu15s");
    static STRUCT_IF_C Ip_BFu8c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu15s, Ip_BFu8c_BFu15s)
//============================================================================


struct  Ip_BFu8c_BFu16i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu8c_BFu16i) C1{ Fp Fc:8 Fi:16}



static void Test_Ip_BFu8c_BFu16i()
{
  {
    init_simple_test("Ip_BFu8c_BFu16i");
    static STRUCT_IF_C Ip_BFu8c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu16i, Ip_BFu8c_BFu16i)
//============================================================================


struct  Ip_BFu8c_BFu16ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu8c_BFu16ll) C1{ Fp Fc:8 FL:16}



static void Test_Ip_BFu8c_BFu16ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu16ll");
    static STRUCT_IF_C Ip_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu16ll, Ip_BFu8c_BFu16ll)
//============================================================================


struct  Ip_BFu8c_BFu16s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu8c_BFu16s) C1{ Fp Fc:8 Fs:16}



static void Test_Ip_BFu8c_BFu16s()
{
  {
    init_simple_test("Ip_BFu8c_BFu16s");
    static STRUCT_IF_C Ip_BFu8c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu16s, Ip_BFu8c_BFu16s)
//============================================================================


struct  Ip_BFu8c_BFu17i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu8c_BFu17i) C1{ Fp Fc:8 Fi:17}



static void Test_Ip_BFu8c_BFu17i()
{
  {
    init_simple_test("Ip_BFu8c_BFu17i");
    static STRUCT_IF_C Ip_BFu8c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu17i, Ip_BFu8c_BFu17i)
//============================================================================


struct  Ip_BFu8c_BFu17ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu8c_BFu17ll) C1{ Fp Fc:8 FL:17}



static void Test_Ip_BFu8c_BFu17ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu17ll");
    static STRUCT_IF_C Ip_BFu8c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu17ll, Ip_BFu8c_BFu17ll)
//============================================================================


struct  Ip_BFu8c_BFu1c  {
  int *v1;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu8c_BFu1c) C1{ Fp Fc:8 Fc:1}



static void Test_Ip_BFu8c_BFu1c()
{
  {
    init_simple_test("Ip_BFu8c_BFu1c");
    static STRUCT_IF_C Ip_BFu8c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu1c, Ip_BFu8c_BFu1c)
//============================================================================


struct  Ip_BFu8c_BFu1i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu8c_BFu1i) C1{ Fp Fc:8 Fi:1}



static void Test_Ip_BFu8c_BFu1i()
{
  {
    init_simple_test("Ip_BFu8c_BFu1i");
    static STRUCT_IF_C Ip_BFu8c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu1i, Ip_BFu8c_BFu1i)
//============================================================================


struct  Ip_BFu8c_BFu1ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu8c_BFu1ll) C1{ Fp Fc:8 FL:1}



static void Test_Ip_BFu8c_BFu1ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu1ll");
    static STRUCT_IF_C Ip_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu1ll, Ip_BFu8c_BFu1ll)
//============================================================================


struct  Ip_BFu8c_BFu1s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu8c_BFu1s) C1{ Fp Fc:8 Fs:1}



static void Test_Ip_BFu8c_BFu1s()
{
  {
    init_simple_test("Ip_BFu8c_BFu1s");
    static STRUCT_IF_C Ip_BFu8c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu1s, Ip_BFu8c_BFu1s)
//============================================================================


struct  Ip_BFu8c_BFu31i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu8c_BFu31i) C1{ Fp Fc:8 Fi:31}



static void Test_Ip_BFu8c_BFu31i()
{
  {
    init_simple_test("Ip_BFu8c_BFu31i");
    static STRUCT_IF_C Ip_BFu8c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu31i, Ip_BFu8c_BFu31i)
//============================================================================


struct  Ip_BFu8c_BFu31ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu8c_BFu31ll) C1{ Fp Fc:8 FL:31}



static void Test_Ip_BFu8c_BFu31ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu31ll");
    static STRUCT_IF_C Ip_BFu8c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu31ll, Ip_BFu8c_BFu31ll)
//============================================================================


struct  Ip_BFu8c_BFu32i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu8c_BFu32i) C1{ Fp Fc:8 Fi:32}



static void Test_Ip_BFu8c_BFu32i()
{
  {
    init_simple_test("Ip_BFu8c_BFu32i");
    static STRUCT_IF_C Ip_BFu8c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu32i, Ip_BFu8c_BFu32i)
//============================================================================


struct  Ip_BFu8c_BFu32ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu8c_BFu32ll) C1{ Fp Fc:8 FL:32}



static void Test_Ip_BFu8c_BFu32ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu32ll");
    static STRUCT_IF_C Ip_BFu8c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu32ll, Ip_BFu8c_BFu32ll)
//============================================================================


struct  Ip_BFu8c_BFu33  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu8c_BFu33) C1{ Fp Fc:8 FL:33}



static void Test_Ip_BFu8c_BFu33()
{
  {
    init_simple_test("Ip_BFu8c_BFu33");
    static STRUCT_IF_C Ip_BFu8c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu33, Ip_BFu8c_BFu33)
//============================================================================


struct  Ip_BFu8c_BFu7c  {
  int *v1;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu8c_BFu7c) C1{ Fp Fc:8 Fc:7}



static void Test_Ip_BFu8c_BFu7c()
{
  {
    init_simple_test("Ip_BFu8c_BFu7c");
    static STRUCT_IF_C Ip_BFu8c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu7c, Ip_BFu8c_BFu7c)
//============================================================================


struct  Ip_BFu8c_BFu7i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu8c_BFu7i) C1{ Fp Fc:8 Fi:7}



static void Test_Ip_BFu8c_BFu7i()
{
  {
    init_simple_test("Ip_BFu8c_BFu7i");
    static STRUCT_IF_C Ip_BFu8c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu7i, Ip_BFu8c_BFu7i)
//============================================================================


struct  Ip_BFu8c_BFu7ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu8c_BFu7ll) C1{ Fp Fc:8 FL:7}



static void Test_Ip_BFu8c_BFu7ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu7ll");
    static STRUCT_IF_C Ip_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu7ll, Ip_BFu8c_BFu7ll)
//============================================================================


struct  Ip_BFu8c_BFu7s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu8c_BFu7s) C1{ Fp Fc:8 Fs:7}



static void Test_Ip_BFu8c_BFu7s()
{
  {
    init_simple_test("Ip_BFu8c_BFu7s");
    static STRUCT_IF_C Ip_BFu8c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu7s, Ip_BFu8c_BFu7s)
//============================================================================


struct  Ip_BFu8c_BFu8c  {
  int *v1;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu8c_BFu8c) C1{ Fp Fc:8 Fc:8}



static void Test_Ip_BFu8c_BFu8c()
{
  {
    init_simple_test("Ip_BFu8c_BFu8c");
    static STRUCT_IF_C Ip_BFu8c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu8c, Ip_BFu8c_BFu8c)
//============================================================================


struct  Ip_BFu8c_BFu8i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu8c_BFu8i) C1{ Fp Fc:8 Fi:8}



static void Test_Ip_BFu8c_BFu8i()
{
  {
    init_simple_test("Ip_BFu8c_BFu8i");
    static STRUCT_IF_C Ip_BFu8c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu8i, Ip_BFu8c_BFu8i)
//============================================================================


struct  Ip_BFu8c_BFu8ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu8c_BFu8ll) C1{ Fp Fc:8 FL:8}



static void Test_Ip_BFu8c_BFu8ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu8ll");
    static STRUCT_IF_C Ip_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu8ll, Ip_BFu8c_BFu8ll)
//============================================================================


struct  Ip_BFu8c_BFu8s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu8c_BFu8s) C1{ Fp Fc:8 Fs:8}



static void Test_Ip_BFu8c_BFu8s()
{
  {
    init_simple_test("Ip_BFu8c_BFu8s");
    static STRUCT_IF_C Ip_BFu8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu8s, Ip_BFu8c_BFu8s)
//============================================================================


struct  Ip_BFu8c_BFu9i  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu8c_BFu9i) C1{ Fp Fc:8 Fi:9}



static void Test_Ip_BFu8c_BFu9i()
{
  {
    init_simple_test("Ip_BFu8c_BFu9i");
    static STRUCT_IF_C Ip_BFu8c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu9i, Ip_BFu8c_BFu9i)
//============================================================================


struct  Ip_BFu8c_BFu9ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu8c_BFu9ll) C1{ Fp Fc:8 FL:9}



static void Test_Ip_BFu8c_BFu9ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu9ll");
    static STRUCT_IF_C Ip_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu9ll, Ip_BFu8c_BFu9ll)
//============================================================================


struct  Ip_BFu8c_BFu9s  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu8c_BFu9s) C1{ Fp Fc:8 Fs:9}



static void Test_Ip_BFu8c_BFu9s()
{
  {
    init_simple_test("Ip_BFu8c_BFu9s");
    static STRUCT_IF_C Ip_BFu8c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu9s, Ip_BFu8c_BFu9s)
//============================================================================


struct  Ip_BFu8c_C  {
  int *v1;
  unsigned char v2:8;
  char v3;
};
//SIG(1 Ip_BFu8c_C) C1{ Fp Fc:8 Fc}



static void Test_Ip_BFu8c_C()
{
  {
    init_simple_test("Ip_BFu8c_C");
    static STRUCT_IF_C Ip_BFu8c_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_C, Ip_BFu8c_C)
//============================================================================


struct  Ip_BFu8c_D  {
  int *v1;
  unsigned char v2:8;
  double v3;
};
//SIG(1 Ip_BFu8c_D) C1{ Fp Fc:8 FL}



static void Test_Ip_BFu8c_D()
{
  {
    init_simple_test("Ip_BFu8c_D");
    static STRUCT_IF_C Ip_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_D, Ip_BFu8c_D)
//============================================================================


struct  Ip_BFu8c_F  {
  int *v1;
  unsigned char v2:8;
  float v3;
};
//SIG(1 Ip_BFu8c_F) C1{ Fp Fc:8 Fi}



static void Test_Ip_BFu8c_F()
{
  {
    init_simple_test("Ip_BFu8c_F");
    static STRUCT_IF_C Ip_BFu8c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_F, Ip_BFu8c_F)
//============================================================================


struct  Ip_BFu8c_I  {
  int *v1;
  unsigned char v2:8;
  int v3;
};
//SIG(1 Ip_BFu8c_I) C1{ Fp Fc:8 Fi}



static void Test_Ip_BFu8c_I()
{
  {
    init_simple_test("Ip_BFu8c_I");
    static STRUCT_IF_C Ip_BFu8c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_I, Ip_BFu8c_I)
//============================================================================


struct  Ip_BFu8c_Ip  {
  int *v1;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 Ip_BFu8c_Ip) C1{ Fp Fc:8 Fp}



static void Test_Ip_BFu8c_Ip()
{
  {
    init_simple_test("Ip_BFu8c_Ip");
    static STRUCT_IF_C Ip_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Ip, Ip_BFu8c_Ip)
//============================================================================


struct  Ip_BFu8c_L  {
  int *v1;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 Ip_BFu8c_L) C1{ Fp Fc:8 FL}



static void Test_Ip_BFu8c_L()
{
  {
    init_simple_test("Ip_BFu8c_L");
    static STRUCT_IF_C Ip_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_L, Ip_BFu8c_L)
//============================================================================


struct  Ip_BFu8c_S  {
  int *v1;
  unsigned char v2:8;
  short v3;
};
//SIG(1 Ip_BFu8c_S) C1{ Fp Fc:8 Fs}



static void Test_Ip_BFu8c_S()
{
  {
    init_simple_test("Ip_BFu8c_S");
    static STRUCT_IF_C Ip_BFu8c_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_S, Ip_BFu8c_S)
//============================================================================


struct  Ip_BFu8c_Uc  {
  int *v1;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 Ip_BFu8c_Uc) C1{ Fp Fc:8 Fc}



static void Test_Ip_BFu8c_Uc()
{
  {
    init_simple_test("Ip_BFu8c_Uc");
    static STRUCT_IF_C Ip_BFu8c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Uc, Ip_BFu8c_Uc)
//============================================================================


struct  Ip_BFu8c_Ui  {
  int *v1;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 Ip_BFu8c_Ui) C1{ Fp Fc:8 Fi}



static void Test_Ip_BFu8c_Ui()
{
  {
    init_simple_test("Ip_BFu8c_Ui");
    static STRUCT_IF_C Ip_BFu8c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Ui, Ip_BFu8c_Ui)
//============================================================================


struct  Ip_BFu8c_Ul  {
  int *v1;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 Ip_BFu8c_Ul) C1{ Fp Fc:8 FL}



static void Test_Ip_BFu8c_Ul()
{
  {
    init_simple_test("Ip_BFu8c_Ul");
    static STRUCT_IF_C Ip_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Ul, Ip_BFu8c_Ul)
//============================================================================


struct  Ip_BFu8c_Us  {
  int *v1;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 Ip_BFu8c_Us) C1{ Fp Fc:8 Fs}



static void Test_Ip_BFu8c_Us()
{
  {
    init_simple_test("Ip_BFu8c_Us");
    static STRUCT_IF_C Ip_BFu8c_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Us, Ip_BFu8c_Us)
//============================================================================


struct  Ip_BFu8c_Vp  {
  int *v1;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 Ip_BFu8c_Vp) C1{ Fp Fc:8 Fp}



static void Test_Ip_BFu8c_Vp()
{
  {
    init_simple_test("Ip_BFu8c_Vp");
    static STRUCT_IF_C Ip_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_Vp, Ip_BFu8c_Vp)
//============================================================================


struct  Ip_BFu8i  {
  int *v1;
  unsigned int v2:8;
};
//SIG(1 Ip_BFu8i) C1{ Fp Fi:8}



static void Test_Ip_BFu8i()
{
  {
    init_simple_test("Ip_BFu8i");
    static STRUCT_IF_C Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i, Ip_BFu8i)
//============================================================================


struct  Ip_BFu8i_BFu15i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu8i_BFu15i) C1{ Fp Fi:8 Fi:15}



static void Test_Ip_BFu8i_BFu15i()
{
  {
    init_simple_test("Ip_BFu8i_BFu15i");
    static STRUCT_IF_C Ip_BFu8i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu15i, Ip_BFu8i_BFu15i)
//============================================================================


struct  Ip_BFu8i_BFu15ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu8i_BFu15ll) C1{ Fp Fi:8 FL:15}



static void Test_Ip_BFu8i_BFu15ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu15ll");
    static STRUCT_IF_C Ip_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu15ll, Ip_BFu8i_BFu15ll)
//============================================================================


struct  Ip_BFu8i_BFu15s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu8i_BFu15s) C1{ Fp Fi:8 Fs:15}



static void Test_Ip_BFu8i_BFu15s()
{
  {
    init_simple_test("Ip_BFu8i_BFu15s");
    static STRUCT_IF_C Ip_BFu8i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu15s, Ip_BFu8i_BFu15s)
//============================================================================


struct  Ip_BFu8i_BFu16i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu8i_BFu16i) C1{ Fp Fi:8 Fi:16}



static void Test_Ip_BFu8i_BFu16i()
{
  {
    init_simple_test("Ip_BFu8i_BFu16i");
    static STRUCT_IF_C Ip_BFu8i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu16i, Ip_BFu8i_BFu16i)
//============================================================================


struct  Ip_BFu8i_BFu16ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu8i_BFu16ll) C1{ Fp Fi:8 FL:16}



static void Test_Ip_BFu8i_BFu16ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu16ll");
    static STRUCT_IF_C Ip_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu16ll, Ip_BFu8i_BFu16ll)
//============================================================================


struct  Ip_BFu8i_BFu16s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu8i_BFu16s) C1{ Fp Fi:8 Fs:16}



static void Test_Ip_BFu8i_BFu16s()
{
  {
    init_simple_test("Ip_BFu8i_BFu16s");
    static STRUCT_IF_C Ip_BFu8i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu16s, Ip_BFu8i_BFu16s)
//============================================================================


struct  Ip_BFu8i_BFu17i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu8i_BFu17i) C1{ Fp Fi:8 Fi:17}



static void Test_Ip_BFu8i_BFu17i()
{
  {
    init_simple_test("Ip_BFu8i_BFu17i");
    static STRUCT_IF_C Ip_BFu8i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu17i, Ip_BFu8i_BFu17i)
//============================================================================


struct  Ip_BFu8i_BFu17ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu8i_BFu17ll) C1{ Fp Fi:8 FL:17}



static void Test_Ip_BFu8i_BFu17ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu17ll");
    static STRUCT_IF_C Ip_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu17ll, Ip_BFu8i_BFu17ll)
//============================================================================


struct  Ip_BFu8i_BFu1c  {
  int *v1;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu8i_BFu1c) C1{ Fp Fi:8 Fc:1}



static void Test_Ip_BFu8i_BFu1c()
{
  {
    init_simple_test("Ip_BFu8i_BFu1c");
    static STRUCT_IF_C Ip_BFu8i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu1c, Ip_BFu8i_BFu1c)
//============================================================================


struct  Ip_BFu8i_BFu1i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu8i_BFu1i) C1{ Fp Fi:8 Fi:1}



static void Test_Ip_BFu8i_BFu1i()
{
  {
    init_simple_test("Ip_BFu8i_BFu1i");
    static STRUCT_IF_C Ip_BFu8i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu1i, Ip_BFu8i_BFu1i)
//============================================================================


struct  Ip_BFu8i_BFu1ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu8i_BFu1ll) C1{ Fp Fi:8 FL:1}



static void Test_Ip_BFu8i_BFu1ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu1ll");
    static STRUCT_IF_C Ip_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu1ll, Ip_BFu8i_BFu1ll)
//============================================================================


struct  Ip_BFu8i_BFu1s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu8i_BFu1s) C1{ Fp Fi:8 Fs:1}



static void Test_Ip_BFu8i_BFu1s()
{
  {
    init_simple_test("Ip_BFu8i_BFu1s");
    static STRUCT_IF_C Ip_BFu8i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu1s, Ip_BFu8i_BFu1s)
//============================================================================


struct  Ip_BFu8i_BFu31i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu8i_BFu31i) C1{ Fp Fi:8 Fi:31}



static void Test_Ip_BFu8i_BFu31i()
{
  {
    init_simple_test("Ip_BFu8i_BFu31i");
    static STRUCT_IF_C Ip_BFu8i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu31i, Ip_BFu8i_BFu31i)
//============================================================================


struct  Ip_BFu8i_BFu31ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu8i_BFu31ll) C1{ Fp Fi:8 FL:31}



static void Test_Ip_BFu8i_BFu31ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu31ll");
    static STRUCT_IF_C Ip_BFu8i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu31ll, Ip_BFu8i_BFu31ll)
//============================================================================


struct  Ip_BFu8i_BFu32i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu8i_BFu32i) C1{ Fp Fi:8 Fi:32}



static void Test_Ip_BFu8i_BFu32i()
{
  {
    init_simple_test("Ip_BFu8i_BFu32i");
    static STRUCT_IF_C Ip_BFu8i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu32i, Ip_BFu8i_BFu32i)
//============================================================================


struct  Ip_BFu8i_BFu32ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu8i_BFu32ll) C1{ Fp Fi:8 FL:32}



static void Test_Ip_BFu8i_BFu32ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu32ll");
    static STRUCT_IF_C Ip_BFu8i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu32ll, Ip_BFu8i_BFu32ll)
//============================================================================


struct  Ip_BFu8i_BFu33  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu8i_BFu33) C1{ Fp Fi:8 FL:33}



static void Test_Ip_BFu8i_BFu33()
{
  {
    init_simple_test("Ip_BFu8i_BFu33");
    static STRUCT_IF_C Ip_BFu8i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_BFu8i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu33, Ip_BFu8i_BFu33)
//============================================================================


struct  Ip_BFu8i_BFu7c  {
  int *v1;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu8i_BFu7c) C1{ Fp Fi:8 Fc:7}



static void Test_Ip_BFu8i_BFu7c()
{
  {
    init_simple_test("Ip_BFu8i_BFu7c");
    static STRUCT_IF_C Ip_BFu8i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu7c, Ip_BFu8i_BFu7c)
//============================================================================


struct  Ip_BFu8i_BFu7i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu8i_BFu7i) C1{ Fp Fi:8 Fi:7}



static void Test_Ip_BFu8i_BFu7i()
{
  {
    init_simple_test("Ip_BFu8i_BFu7i");
    static STRUCT_IF_C Ip_BFu8i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu7i, Ip_BFu8i_BFu7i)
//============================================================================


struct  Ip_BFu8i_BFu7ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu8i_BFu7ll) C1{ Fp Fi:8 FL:7}



static void Test_Ip_BFu8i_BFu7ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu7ll");
    static STRUCT_IF_C Ip_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu7ll, Ip_BFu8i_BFu7ll)
//============================================================================


struct  Ip_BFu8i_BFu7s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu8i_BFu7s) C1{ Fp Fi:8 Fs:7}



static void Test_Ip_BFu8i_BFu7s()
{
  {
    init_simple_test("Ip_BFu8i_BFu7s");
    static STRUCT_IF_C Ip_BFu8i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu7s, Ip_BFu8i_BFu7s)
//============================================================================


struct  Ip_BFu8i_BFu8c  {
  int *v1;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu8i_BFu8c) C1{ Fp Fi:8 Fc:8}



static void Test_Ip_BFu8i_BFu8c()
{
  {
    init_simple_test("Ip_BFu8i_BFu8c");
    static STRUCT_IF_C Ip_BFu8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu8c, Ip_BFu8i_BFu8c)
//============================================================================


struct  Ip_BFu8i_BFu8i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu8i_BFu8i) C1{ Fp Fi:8 Fi:8}



static void Test_Ip_BFu8i_BFu8i()
{
  {
    init_simple_test("Ip_BFu8i_BFu8i");
    static STRUCT_IF_C Ip_BFu8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu8i, Ip_BFu8i_BFu8i)
//============================================================================


struct  Ip_BFu8i_BFu8ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu8i_BFu8ll) C1{ Fp Fi:8 FL:8}



static void Test_Ip_BFu8i_BFu8ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu8ll");
    static STRUCT_IF_C Ip_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu8ll, Ip_BFu8i_BFu8ll)
//============================================================================


struct  Ip_BFu8i_BFu8s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu8i_BFu8s) C1{ Fp Fi:8 Fs:8}



static void Test_Ip_BFu8i_BFu8s()
{
  {
    init_simple_test("Ip_BFu8i_BFu8s");
    static STRUCT_IF_C Ip_BFu8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu8s, Ip_BFu8i_BFu8s)
//============================================================================


struct  Ip_BFu8i_BFu9i  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu8i_BFu9i) C1{ Fp Fi:8 Fi:9}



static void Test_Ip_BFu8i_BFu9i()
{
  {
    init_simple_test("Ip_BFu8i_BFu9i");
    static STRUCT_IF_C Ip_BFu8i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu9i, Ip_BFu8i_BFu9i)
//============================================================================


struct  Ip_BFu8i_BFu9ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu8i_BFu9ll) C1{ Fp Fi:8 FL:9}



static void Test_Ip_BFu8i_BFu9ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu9ll");
    static STRUCT_IF_C Ip_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu9ll, Ip_BFu8i_BFu9ll)
//============================================================================


struct  Ip_BFu8i_BFu9s  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu8i_BFu9s) C1{ Fp Fi:8 Fs:9}



static void Test_Ip_BFu8i_BFu9s()
{
  {
    init_simple_test("Ip_BFu8i_BFu9s");
    static STRUCT_IF_C Ip_BFu8i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu9s, Ip_BFu8i_BFu9s)
//============================================================================


struct  Ip_BFu8i_C  {
  int *v1;
  unsigned int v2:8;
  char v3;
};
//SIG(1 Ip_BFu8i_C) C1{ Fp Fi:8 Fc}



static void Test_Ip_BFu8i_C()
{
  {
    init_simple_test("Ip_BFu8i_C");
    static STRUCT_IF_C Ip_BFu8i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_C, Ip_BFu8i_C)
//============================================================================


struct  Ip_BFu8i_D  {
  int *v1;
  unsigned int v2:8;
  double v3;
};
//SIG(1 Ip_BFu8i_D) C1{ Fp Fi:8 FL}



static void Test_Ip_BFu8i_D()
{
  {
    init_simple_test("Ip_BFu8i_D");
    static STRUCT_IF_C Ip_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_D, Ip_BFu8i_D)
//============================================================================


struct  Ip_BFu8i_F  {
  int *v1;
  unsigned int v2:8;
  float v3;
};
//SIG(1 Ip_BFu8i_F) C1{ Fp Fi:8 Fi}



static void Test_Ip_BFu8i_F()
{
  {
    init_simple_test("Ip_BFu8i_F");
    static STRUCT_IF_C Ip_BFu8i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_F, Ip_BFu8i_F)
//============================================================================


struct  Ip_BFu8i_I  {
  int *v1;
  unsigned int v2:8;
  int v3;
};
//SIG(1 Ip_BFu8i_I) C1{ Fp Fi:8 Fi}



static void Test_Ip_BFu8i_I()
{
  {
    init_simple_test("Ip_BFu8i_I");
    static STRUCT_IF_C Ip_BFu8i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_I, Ip_BFu8i_I)
//============================================================================


struct  Ip_BFu8i_Ip  {
  int *v1;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 Ip_BFu8i_Ip) C1{ Fp Fi:8 Fp}



static void Test_Ip_BFu8i_Ip()
{
  {
    init_simple_test("Ip_BFu8i_Ip");
    static STRUCT_IF_C Ip_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Ip, Ip_BFu8i_Ip)
//============================================================================


struct  Ip_BFu8i_L  {
  int *v1;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 Ip_BFu8i_L) C1{ Fp Fi:8 FL}



static void Test_Ip_BFu8i_L()
{
  {
    init_simple_test("Ip_BFu8i_L");
    static STRUCT_IF_C Ip_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_L, Ip_BFu8i_L)
//============================================================================


struct  Ip_BFu8i_S  {
  int *v1;
  unsigned int v2:8;
  short v3;
};
//SIG(1 Ip_BFu8i_S) C1{ Fp Fi:8 Fs}



static void Test_Ip_BFu8i_S()
{
  {
    init_simple_test("Ip_BFu8i_S");
    static STRUCT_IF_C Ip_BFu8i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_S, Ip_BFu8i_S)
//============================================================================


struct  Ip_BFu8i_Uc  {
  int *v1;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 Ip_BFu8i_Uc) C1{ Fp Fi:8 Fc}



static void Test_Ip_BFu8i_Uc()
{
  {
    init_simple_test("Ip_BFu8i_Uc");
    static STRUCT_IF_C Ip_BFu8i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Uc, Ip_BFu8i_Uc)
//============================================================================


struct  Ip_BFu8i_Ui  {
  int *v1;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 Ip_BFu8i_Ui) C1{ Fp Fi:8 Fi}



static void Test_Ip_BFu8i_Ui()
{
  {
    init_simple_test("Ip_BFu8i_Ui");
    static STRUCT_IF_C Ip_BFu8i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Ui, Ip_BFu8i_Ui)
//============================================================================


struct  Ip_BFu8i_Ul  {
  int *v1;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 Ip_BFu8i_Ul) C1{ Fp Fi:8 FL}



static void Test_Ip_BFu8i_Ul()
{
  {
    init_simple_test("Ip_BFu8i_Ul");
    static STRUCT_IF_C Ip_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Ul, Ip_BFu8i_Ul)
//============================================================================


struct  Ip_BFu8i_Us  {
  int *v1;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 Ip_BFu8i_Us) C1{ Fp Fi:8 Fs}



static void Test_Ip_BFu8i_Us()
{
  {
    init_simple_test("Ip_BFu8i_Us");
    static STRUCT_IF_C Ip_BFu8i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Us, Ip_BFu8i_Us)
//============================================================================


struct  Ip_BFu8i_Vp  {
  int *v1;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 Ip_BFu8i_Vp) C1{ Fp Fi:8 Fp}



static void Test_Ip_BFu8i_Vp()
{
  {
    init_simple_test("Ip_BFu8i_Vp");
    static STRUCT_IF_C Ip_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_Vp, Ip_BFu8i_Vp)
//============================================================================


struct  Ip_BFu8ll  {
  int *v1;
  __tsu64 v2:8;
};
//SIG(1 Ip_BFu8ll) C1{ Fp FL:8}



static void Test_Ip_BFu8ll()
{
  {
    init_simple_test("Ip_BFu8ll");
    static STRUCT_IF_C Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll, Ip_BFu8ll)
//============================================================================


struct  Ip_BFu8ll_BFu15i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu8ll_BFu15i) C1{ Fp FL:8 Fi:15}



static void Test_Ip_BFu8ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu15i");
    static STRUCT_IF_C Ip_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu15i, Ip_BFu8ll_BFu15i)
//============================================================================


struct  Ip_BFu8ll_BFu15ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu8ll_BFu15ll) C1{ Fp FL:8 FL:15}



static void Test_Ip_BFu8ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu15ll, Ip_BFu8ll_BFu15ll)
//============================================================================


struct  Ip_BFu8ll_BFu15s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu8ll_BFu15s) C1{ Fp FL:8 Fs:15}



static void Test_Ip_BFu8ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu15s");
    static STRUCT_IF_C Ip_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu15s, Ip_BFu8ll_BFu15s)
//============================================================================


struct  Ip_BFu8ll_BFu16i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu8ll_BFu16i) C1{ Fp FL:8 Fi:16}



static void Test_Ip_BFu8ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu16i");
    static STRUCT_IF_C Ip_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu16i, Ip_BFu8ll_BFu16i)
//============================================================================


struct  Ip_BFu8ll_BFu16ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu8ll_BFu16ll) C1{ Fp FL:8 FL:16}



static void Test_Ip_BFu8ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu16ll, Ip_BFu8ll_BFu16ll)
//============================================================================


struct  Ip_BFu8ll_BFu16s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu8ll_BFu16s) C1{ Fp FL:8 Fs:16}



static void Test_Ip_BFu8ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu16s");
    static STRUCT_IF_C Ip_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu16s, Ip_BFu8ll_BFu16s)
//============================================================================


struct  Ip_BFu8ll_BFu17i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu8ll_BFu17i) C1{ Fp FL:8 Fi:17}



static void Test_Ip_BFu8ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu17i");
    static STRUCT_IF_C Ip_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu17i, Ip_BFu8ll_BFu17i)
//============================================================================


struct  Ip_BFu8ll_BFu17ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu8ll_BFu17ll) C1{ Fp FL:8 FL:17}



static void Test_Ip_BFu8ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu17ll, Ip_BFu8ll_BFu17ll)
//============================================================================


struct  Ip_BFu8ll_BFu1c  {
  int *v1;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu8ll_BFu1c) C1{ Fp FL:8 Fc:1}



static void Test_Ip_BFu8ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu8ll_BFu1c");
    static STRUCT_IF_C Ip_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu1c, Ip_BFu8ll_BFu1c)
//============================================================================


struct  Ip_BFu8ll_BFu1i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu8ll_BFu1i) C1{ Fp FL:8 Fi:1}



static void Test_Ip_BFu8ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu1i");
    static STRUCT_IF_C Ip_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu1i, Ip_BFu8ll_BFu1i)
//============================================================================


struct  Ip_BFu8ll_BFu1ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu8ll_BFu1ll) C1{ Fp FL:8 FL:1}



static void Test_Ip_BFu8ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu1ll, Ip_BFu8ll_BFu1ll)
//============================================================================


struct  Ip_BFu8ll_BFu1s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu8ll_BFu1s) C1{ Fp FL:8 Fs:1}



static void Test_Ip_BFu8ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu1s");
    static STRUCT_IF_C Ip_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu1s, Ip_BFu8ll_BFu1s)
//============================================================================


struct  Ip_BFu8ll_BFu31i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu8ll_BFu31i) C1{ Fp FL:8 Fi:31}



static void Test_Ip_BFu8ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu31i");
    static STRUCT_IF_C Ip_BFu8ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu31i, Ip_BFu8ll_BFu31i)
//============================================================================


struct  Ip_BFu8ll_BFu31ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu8ll_BFu31ll) C1{ Fp FL:8 FL:31}



static void Test_Ip_BFu8ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu31ll, Ip_BFu8ll_BFu31ll)
//============================================================================


struct  Ip_BFu8ll_BFu32i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu8ll_BFu32i) C1{ Fp FL:8 Fi:32}



static void Test_Ip_BFu8ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu32i");
    static STRUCT_IF_C Ip_BFu8ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu32i, Ip_BFu8ll_BFu32i)
//============================================================================


struct  Ip_BFu8ll_BFu32ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu8ll_BFu32ll) C1{ Fp FL:8 FL:32}



static void Test_Ip_BFu8ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu32ll, Ip_BFu8ll_BFu32ll)
//============================================================================


struct  Ip_BFu8ll_BFu33  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu8ll_BFu33) C1{ Fp FL:8 FL:33}



static void Test_Ip_BFu8ll_BFu33()
{
  {
    init_simple_test("Ip_BFu8ll_BFu33");
    static STRUCT_IF_C Ip_BFu8ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu33, Ip_BFu8ll_BFu33)
//============================================================================


struct  Ip_BFu8ll_BFu7c  {
  int *v1;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu8ll_BFu7c) C1{ Fp FL:8 Fc:7}



static void Test_Ip_BFu8ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu8ll_BFu7c");
    static STRUCT_IF_C Ip_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu7c, Ip_BFu8ll_BFu7c)
//============================================================================


struct  Ip_BFu8ll_BFu7i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu8ll_BFu7i) C1{ Fp FL:8 Fi:7}



static void Test_Ip_BFu8ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu7i");
    static STRUCT_IF_C Ip_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu7i, Ip_BFu8ll_BFu7i)
//============================================================================


struct  Ip_BFu8ll_BFu7ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu8ll_BFu7ll) C1{ Fp FL:8 FL:7}



static void Test_Ip_BFu8ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu7ll, Ip_BFu8ll_BFu7ll)
//============================================================================


struct  Ip_BFu8ll_BFu7s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu8ll_BFu7s) C1{ Fp FL:8 Fs:7}



static void Test_Ip_BFu8ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu7s");
    static STRUCT_IF_C Ip_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu7s, Ip_BFu8ll_BFu7s)
//============================================================================


struct  Ip_BFu8ll_BFu8c  {
  int *v1;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu8ll_BFu8c) C1{ Fp FL:8 Fc:8}



static void Test_Ip_BFu8ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu8ll_BFu8c");
    static STRUCT_IF_C Ip_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu8c, Ip_BFu8ll_BFu8c)
//============================================================================


struct  Ip_BFu8ll_BFu8i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu8ll_BFu8i) C1{ Fp FL:8 Fi:8}



static void Test_Ip_BFu8ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu8i");
    static STRUCT_IF_C Ip_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu8i, Ip_BFu8ll_BFu8i)
//============================================================================


struct  Ip_BFu8ll_BFu8ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu8ll_BFu8ll) C1{ Fp FL:8 FL:8}



static void Test_Ip_BFu8ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu8ll, Ip_BFu8ll_BFu8ll)
//============================================================================


struct  Ip_BFu8ll_BFu8s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu8ll_BFu8s) C1{ Fp FL:8 Fs:8}



static void Test_Ip_BFu8ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu8s");
    static STRUCT_IF_C Ip_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu8s, Ip_BFu8ll_BFu8s)
//============================================================================


struct  Ip_BFu8ll_BFu9i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu8ll_BFu9i) C1{ Fp FL:8 Fi:9}



static void Test_Ip_BFu8ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu9i");
    static STRUCT_IF_C Ip_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu9i, Ip_BFu8ll_BFu9i)
//============================================================================


struct  Ip_BFu8ll_BFu9ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu8ll_BFu9ll) C1{ Fp FL:8 FL:9}



static void Test_Ip_BFu8ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu9ll, Ip_BFu8ll_BFu9ll)
//============================================================================


struct  Ip_BFu8ll_BFu9s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu8ll_BFu9s) C1{ Fp FL:8 Fs:9}



static void Test_Ip_BFu8ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu9s");
    static STRUCT_IF_C Ip_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu9s, Ip_BFu8ll_BFu9s)
//============================================================================


struct  Ip_BFu8ll_C  {
  int *v1;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 Ip_BFu8ll_C) C1{ Fp FL:8 Fc}



static void Test_Ip_BFu8ll_C()
{
  {
    init_simple_test("Ip_BFu8ll_C");
    static STRUCT_IF_C Ip_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_C, Ip_BFu8ll_C)
//============================================================================


struct  Ip_BFu8ll_D  {
  int *v1;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 Ip_BFu8ll_D) C1{ Fp FL:8 FL}



static void Test_Ip_BFu8ll_D()
{
  {
    init_simple_test("Ip_BFu8ll_D");
    static STRUCT_IF_C Ip_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_D, Ip_BFu8ll_D)
//============================================================================


struct  Ip_BFu8ll_F  {
  int *v1;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 Ip_BFu8ll_F) C1{ Fp FL:8 Fi}



static void Test_Ip_BFu8ll_F()
{
  {
    init_simple_test("Ip_BFu8ll_F");
    static STRUCT_IF_C Ip_BFu8ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_F, Ip_BFu8ll_F)
//============================================================================


struct  Ip_BFu8ll_I  {
  int *v1;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 Ip_BFu8ll_I) C1{ Fp FL:8 Fi}



static void Test_Ip_BFu8ll_I()
{
  {
    init_simple_test("Ip_BFu8ll_I");
    static STRUCT_IF_C Ip_BFu8ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_I, Ip_BFu8ll_I)
//============================================================================


struct  Ip_BFu8ll_Ip  {
  int *v1;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 Ip_BFu8ll_Ip) C1{ Fp FL:8 Fp}



static void Test_Ip_BFu8ll_Ip()
{
  {
    init_simple_test("Ip_BFu8ll_Ip");
    static STRUCT_IF_C Ip_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Ip, Ip_BFu8ll_Ip)
//============================================================================


struct  Ip_BFu8ll_L  {
  int *v1;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 Ip_BFu8ll_L) C1{ Fp FL:8 FL}



static void Test_Ip_BFu8ll_L()
{
  {
    init_simple_test("Ip_BFu8ll_L");
    static STRUCT_IF_C Ip_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_L, Ip_BFu8ll_L)
//============================================================================


struct  Ip_BFu8ll_S  {
  int *v1;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 Ip_BFu8ll_S) C1{ Fp FL:8 Fs}



static void Test_Ip_BFu8ll_S()
{
  {
    init_simple_test("Ip_BFu8ll_S");
    static STRUCT_IF_C Ip_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_S, Ip_BFu8ll_S)
//============================================================================


struct  Ip_BFu8ll_Uc  {
  int *v1;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 Ip_BFu8ll_Uc) C1{ Fp FL:8 Fc}



static void Test_Ip_BFu8ll_Uc()
{
  {
    init_simple_test("Ip_BFu8ll_Uc");
    static STRUCT_IF_C Ip_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Uc, Ip_BFu8ll_Uc)
//============================================================================


struct  Ip_BFu8ll_Ui  {
  int *v1;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 Ip_BFu8ll_Ui) C1{ Fp FL:8 Fi}



static void Test_Ip_BFu8ll_Ui()
{
  {
    init_simple_test("Ip_BFu8ll_Ui");
    static STRUCT_IF_C Ip_BFu8ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Ui, Ip_BFu8ll_Ui)
//============================================================================


struct  Ip_BFu8ll_Ul  {
  int *v1;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 Ip_BFu8ll_Ul) C1{ Fp FL:8 FL}



static void Test_Ip_BFu8ll_Ul()
{
  {
    init_simple_test("Ip_BFu8ll_Ul");
    static STRUCT_IF_C Ip_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Ul, Ip_BFu8ll_Ul)
//============================================================================


struct  Ip_BFu8ll_Us  {
  int *v1;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 Ip_BFu8ll_Us) C1{ Fp FL:8 Fs}



static void Test_Ip_BFu8ll_Us()
{
  {
    init_simple_test("Ip_BFu8ll_Us");
    static STRUCT_IF_C Ip_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Us, Ip_BFu8ll_Us)
//============================================================================


struct  Ip_BFu8ll_Vp  {
  int *v1;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 Ip_BFu8ll_Vp) C1{ Fp FL:8 Fp}



static void Test_Ip_BFu8ll_Vp()
{
  {
    init_simple_test("Ip_BFu8ll_Vp");
    static STRUCT_IF_C Ip_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_Vp, Ip_BFu8ll_Vp)
//============================================================================


struct  Ip_BFu8s  {
  int *v1;
  unsigned short v2:8;
};
//SIG(1 Ip_BFu8s) C1{ Fp Fs:8}



static void Test_Ip_BFu8s()
{
  {
    init_simple_test("Ip_BFu8s");
    static STRUCT_IF_C Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s, Ip_BFu8s)
//============================================================================


struct  Ip_BFu8s_BFu15i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu8s_BFu15i) C1{ Fp Fs:8 Fi:15}



static void Test_Ip_BFu8s_BFu15i()
{
  {
    init_simple_test("Ip_BFu8s_BFu15i");
    static STRUCT_IF_C Ip_BFu8s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu15i, Ip_BFu8s_BFu15i)
//============================================================================


struct  Ip_BFu8s_BFu15ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu8s_BFu15ll) C1{ Fp Fs:8 FL:15}



static void Test_Ip_BFu8s_BFu15ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu15ll");
    static STRUCT_IF_C Ip_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu15ll, Ip_BFu8s_BFu15ll)
//============================================================================


struct  Ip_BFu8s_BFu15s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu8s_BFu15s) C1{ Fp Fs:8 Fs:15}



static void Test_Ip_BFu8s_BFu15s()
{
  {
    init_simple_test("Ip_BFu8s_BFu15s");
    static STRUCT_IF_C Ip_BFu8s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu15s, Ip_BFu8s_BFu15s)
//============================================================================


struct  Ip_BFu8s_BFu16i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu8s_BFu16i) C1{ Fp Fs:8 Fi:16}



static void Test_Ip_BFu8s_BFu16i()
{
  {
    init_simple_test("Ip_BFu8s_BFu16i");
    static STRUCT_IF_C Ip_BFu8s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu16i, Ip_BFu8s_BFu16i)
//============================================================================


struct  Ip_BFu8s_BFu16ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu8s_BFu16ll) C1{ Fp Fs:8 FL:16}



static void Test_Ip_BFu8s_BFu16ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu16ll");
    static STRUCT_IF_C Ip_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu16ll, Ip_BFu8s_BFu16ll)
//============================================================================


struct  Ip_BFu8s_BFu16s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu8s_BFu16s) C1{ Fp Fs:8 Fs:16}



static void Test_Ip_BFu8s_BFu16s()
{
  {
    init_simple_test("Ip_BFu8s_BFu16s");
    static STRUCT_IF_C Ip_BFu8s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu16s, Ip_BFu8s_BFu16s)
//============================================================================


struct  Ip_BFu8s_BFu17i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu8s_BFu17i) C1{ Fp Fs:8 Fi:17}



static void Test_Ip_BFu8s_BFu17i()
{
  {
    init_simple_test("Ip_BFu8s_BFu17i");
    static STRUCT_IF_C Ip_BFu8s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu17i, Ip_BFu8s_BFu17i)
//============================================================================


struct  Ip_BFu8s_BFu17ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu8s_BFu17ll) C1{ Fp Fs:8 FL:17}



static void Test_Ip_BFu8s_BFu17ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu17ll");
    static STRUCT_IF_C Ip_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu17ll, Ip_BFu8s_BFu17ll)
//============================================================================


struct  Ip_BFu8s_BFu1c  {
  int *v1;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu8s_BFu1c) C1{ Fp Fs:8 Fc:1}



static void Test_Ip_BFu8s_BFu1c()
{
  {
    init_simple_test("Ip_BFu8s_BFu1c");
    static STRUCT_IF_C Ip_BFu8s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu1c, Ip_BFu8s_BFu1c)
//============================================================================


struct  Ip_BFu8s_BFu1i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu8s_BFu1i) C1{ Fp Fs:8 Fi:1}



static void Test_Ip_BFu8s_BFu1i()
{
  {
    init_simple_test("Ip_BFu8s_BFu1i");
    static STRUCT_IF_C Ip_BFu8s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu1i, Ip_BFu8s_BFu1i)
//============================================================================


struct  Ip_BFu8s_BFu1ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu8s_BFu1ll) C1{ Fp Fs:8 FL:1}



static void Test_Ip_BFu8s_BFu1ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu1ll");
    static STRUCT_IF_C Ip_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu1ll, Ip_BFu8s_BFu1ll)
//============================================================================


struct  Ip_BFu8s_BFu1s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu8s_BFu1s) C1{ Fp Fs:8 Fs:1}



static void Test_Ip_BFu8s_BFu1s()
{
  {
    init_simple_test("Ip_BFu8s_BFu1s");
    static STRUCT_IF_C Ip_BFu8s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu1s, Ip_BFu8s_BFu1s)
//============================================================================


struct  Ip_BFu8s_BFu31i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu8s_BFu31i) C1{ Fp Fs:8 Fi:31}



static void Test_Ip_BFu8s_BFu31i()
{
  {
    init_simple_test("Ip_BFu8s_BFu31i");
    static STRUCT_IF_C Ip_BFu8s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu31i, Ip_BFu8s_BFu31i)
//============================================================================


struct  Ip_BFu8s_BFu31ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu8s_BFu31ll) C1{ Fp Fs:8 FL:31}



static void Test_Ip_BFu8s_BFu31ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu31ll");
    static STRUCT_IF_C Ip_BFu8s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu31ll, Ip_BFu8s_BFu31ll)
//============================================================================


struct  Ip_BFu8s_BFu32i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu8s_BFu32i) C1{ Fp Fs:8 Fi:32}



static void Test_Ip_BFu8s_BFu32i()
{
  {
    init_simple_test("Ip_BFu8s_BFu32i");
    static STRUCT_IF_C Ip_BFu8s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu32i, Ip_BFu8s_BFu32i)
//============================================================================


struct  Ip_BFu8s_BFu32ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu8s_BFu32ll) C1{ Fp Fs:8 FL:32}



static void Test_Ip_BFu8s_BFu32ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu32ll");
    static STRUCT_IF_C Ip_BFu8s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu32ll, Ip_BFu8s_BFu32ll)
//============================================================================


struct  Ip_BFu8s_BFu33  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu8s_BFu33) C1{ Fp Fs:8 FL:33}



static void Test_Ip_BFu8s_BFu33()
{
  {
    init_simple_test("Ip_BFu8s_BFu33");
    static STRUCT_IF_C Ip_BFu8s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_BFu8s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu33, Ip_BFu8s_BFu33)
//============================================================================


struct  Ip_BFu8s_BFu7c  {
  int *v1;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu8s_BFu7c) C1{ Fp Fs:8 Fc:7}



static void Test_Ip_BFu8s_BFu7c()
{
  {
    init_simple_test("Ip_BFu8s_BFu7c");
    static STRUCT_IF_C Ip_BFu8s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu7c, Ip_BFu8s_BFu7c)
//============================================================================


struct  Ip_BFu8s_BFu7i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu8s_BFu7i) C1{ Fp Fs:8 Fi:7}



static void Test_Ip_BFu8s_BFu7i()
{
  {
    init_simple_test("Ip_BFu8s_BFu7i");
    static STRUCT_IF_C Ip_BFu8s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu7i, Ip_BFu8s_BFu7i)
//============================================================================


struct  Ip_BFu8s_BFu7ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu8s_BFu7ll) C1{ Fp Fs:8 FL:7}



static void Test_Ip_BFu8s_BFu7ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu7ll");
    static STRUCT_IF_C Ip_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu7ll, Ip_BFu8s_BFu7ll)
//============================================================================


struct  Ip_BFu8s_BFu7s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu8s_BFu7s) C1{ Fp Fs:8 Fs:7}



static void Test_Ip_BFu8s_BFu7s()
{
  {
    init_simple_test("Ip_BFu8s_BFu7s");
    static STRUCT_IF_C Ip_BFu8s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu7s, Ip_BFu8s_BFu7s)
//============================================================================


struct  Ip_BFu8s_BFu8c  {
  int *v1;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu8s_BFu8c) C1{ Fp Fs:8 Fc:8}



static void Test_Ip_BFu8s_BFu8c()
{
  {
    init_simple_test("Ip_BFu8s_BFu8c");
    static STRUCT_IF_C Ip_BFu8s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu8c, Ip_BFu8s_BFu8c)
//============================================================================


struct  Ip_BFu8s_BFu8i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu8s_BFu8i) C1{ Fp Fs:8 Fi:8}



static void Test_Ip_BFu8s_BFu8i()
{
  {
    init_simple_test("Ip_BFu8s_BFu8i");
    static STRUCT_IF_C Ip_BFu8s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu8i, Ip_BFu8s_BFu8i)
//============================================================================


struct  Ip_BFu8s_BFu8ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu8s_BFu8ll) C1{ Fp Fs:8 FL:8}



static void Test_Ip_BFu8s_BFu8ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu8ll");
    static STRUCT_IF_C Ip_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu8ll, Ip_BFu8s_BFu8ll)
//============================================================================


struct  Ip_BFu8s_BFu8s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu8s_BFu8s) C1{ Fp Fs:8 Fs:8}



static void Test_Ip_BFu8s_BFu8s()
{
  {
    init_simple_test("Ip_BFu8s_BFu8s");
    static STRUCT_IF_C Ip_BFu8s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu8s, Ip_BFu8s_BFu8s)
//============================================================================


struct  Ip_BFu8s_BFu9i  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu8s_BFu9i) C1{ Fp Fs:8 Fi:9}



static void Test_Ip_BFu8s_BFu9i()
{
  {
    init_simple_test("Ip_BFu8s_BFu9i");
    static STRUCT_IF_C Ip_BFu8s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu9i, Ip_BFu8s_BFu9i)
//============================================================================


struct  Ip_BFu8s_BFu9ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu8s_BFu9ll) C1{ Fp Fs:8 FL:9}



static void Test_Ip_BFu8s_BFu9ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu9ll");
    static STRUCT_IF_C Ip_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu9ll, Ip_BFu8s_BFu9ll)
//============================================================================


struct  Ip_BFu8s_BFu9s  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu8s_BFu9s) C1{ Fp Fs:8 Fs:9}



static void Test_Ip_BFu8s_BFu9s()
{
  {
    init_simple_test("Ip_BFu8s_BFu9s");
    static STRUCT_IF_C Ip_BFu8s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu9s, Ip_BFu8s_BFu9s)
//============================================================================


struct  Ip_BFu8s_C  {
  int *v1;
  unsigned short v2:8;
  char v3;
};
//SIG(1 Ip_BFu8s_C) C1{ Fp Fs:8 Fc}



static void Test_Ip_BFu8s_C()
{
  {
    init_simple_test("Ip_BFu8s_C");
    static STRUCT_IF_C Ip_BFu8s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_C");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_C, Ip_BFu8s_C)
//============================================================================


struct  Ip_BFu8s_D  {
  int *v1;
  unsigned short v2:8;
  double v3;
};
//SIG(1 Ip_BFu8s_D) C1{ Fp Fs:8 FL}



static void Test_Ip_BFu8s_D()
{
  {
    init_simple_test("Ip_BFu8s_D");
    static STRUCT_IF_C Ip_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_D, Ip_BFu8s_D)
//============================================================================


struct  Ip_BFu8s_F  {
  int *v1;
  unsigned short v2:8;
  float v3;
};
//SIG(1 Ip_BFu8s_F) C1{ Fp Fs:8 Fi}



static void Test_Ip_BFu8s_F()
{
  {
    init_simple_test("Ip_BFu8s_F");
    static STRUCT_IF_C Ip_BFu8s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_F, Ip_BFu8s_F)
//============================================================================


struct  Ip_BFu8s_I  {
  int *v1;
  unsigned short v2:8;
  int v3;
};
//SIG(1 Ip_BFu8s_I) C1{ Fp Fs:8 Fi}



static void Test_Ip_BFu8s_I()
{
  {
    init_simple_test("Ip_BFu8s_I");
    static STRUCT_IF_C Ip_BFu8s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_I, Ip_BFu8s_I)
//============================================================================


struct  Ip_BFu8s_Ip  {
  int *v1;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 Ip_BFu8s_Ip) C1{ Fp Fs:8 Fp}



static void Test_Ip_BFu8s_Ip()
{
  {
    init_simple_test("Ip_BFu8s_Ip");
    static STRUCT_IF_C Ip_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Ip, Ip_BFu8s_Ip)
//============================================================================


struct  Ip_BFu8s_L  {
  int *v1;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 Ip_BFu8s_L) C1{ Fp Fs:8 FL}



static void Test_Ip_BFu8s_L()
{
  {
    init_simple_test("Ip_BFu8s_L");
    static STRUCT_IF_C Ip_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_L, Ip_BFu8s_L)
//============================================================================


struct  Ip_BFu8s_S  {
  int *v1;
  unsigned short v2:8;
  short v3;
};
//SIG(1 Ip_BFu8s_S) C1{ Fp Fs:8 Fs}



static void Test_Ip_BFu8s_S()
{
  {
    init_simple_test("Ip_BFu8s_S");
    static STRUCT_IF_C Ip_BFu8s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_S, Ip_BFu8s_S)
//============================================================================


struct  Ip_BFu8s_Uc  {
  int *v1;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 Ip_BFu8s_Uc) C1{ Fp Fs:8 Fc}



static void Test_Ip_BFu8s_Uc()
{
  {
    init_simple_test("Ip_BFu8s_Uc");
    static STRUCT_IF_C Ip_BFu8s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Uc");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Uc, Ip_BFu8s_Uc)
//============================================================================


struct  Ip_BFu8s_Ui  {
  int *v1;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 Ip_BFu8s_Ui) C1{ Fp Fs:8 Fi}



static void Test_Ip_BFu8s_Ui()
{
  {
    init_simple_test("Ip_BFu8s_Ui");
    static STRUCT_IF_C Ip_BFu8s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu8s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Ui, Ip_BFu8s_Ui)
//============================================================================


struct  Ip_BFu8s_Ul  {
  int *v1;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 Ip_BFu8s_Ul) C1{ Fp Fs:8 FL}



static void Test_Ip_BFu8s_Ul()
{
  {
    init_simple_test("Ip_BFu8s_Ul");
    static STRUCT_IF_C Ip_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Ul, Ip_BFu8s_Ul)
//============================================================================


struct  Ip_BFu8s_Us  {
  int *v1;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 Ip_BFu8s_Us) C1{ Fp Fs:8 Fs}



static void Test_Ip_BFu8s_Us()
{
  {
    init_simple_test("Ip_BFu8s_Us");
    static STRUCT_IF_C Ip_BFu8s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Us, Ip_BFu8s_Us)
//============================================================================


struct  Ip_BFu8s_Vp  {
  int *v1;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 Ip_BFu8s_Vp) C1{ Fp Fs:8 Fp}



static void Test_Ip_BFu8s_Vp()
{
  {
    init_simple_test("Ip_BFu8s_Vp");
    static STRUCT_IF_C Ip_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_Vp, Ip_BFu8s_Vp)
//============================================================================


struct  Ip_BFu9i  {
  int *v1;
  unsigned int v2:9;
};
//SIG(1 Ip_BFu9i) C1{ Fp Fi:9}



static void Test_Ip_BFu9i()
{
  {
    init_simple_test("Ip_BFu9i");
    static STRUCT_IF_C Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i, Ip_BFu9i)
//============================================================================


struct  Ip_BFu9i_BFu15i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu9i_BFu15i) C1{ Fp Fi:9 Fi:15}



static void Test_Ip_BFu9i_BFu15i()
{
  {
    init_simple_test("Ip_BFu9i_BFu15i");
    static STRUCT_IF_C Ip_BFu9i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu15i, Ip_BFu9i_BFu15i)
//============================================================================


struct  Ip_BFu9i_BFu15ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu9i_BFu15ll) C1{ Fp Fi:9 FL:15}



static void Test_Ip_BFu9i_BFu15ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu15ll");
    static STRUCT_IF_C Ip_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu15ll, Ip_BFu9i_BFu15ll)
//============================================================================


struct  Ip_BFu9i_BFu15s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu9i_BFu15s) C1{ Fp Fi:9 Fs:15}



static void Test_Ip_BFu9i_BFu15s()
{
  {
    init_simple_test("Ip_BFu9i_BFu15s");
    static STRUCT_IF_C Ip_BFu9i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu15s, Ip_BFu9i_BFu15s)
//============================================================================


struct  Ip_BFu9i_BFu16i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu9i_BFu16i) C1{ Fp Fi:9 Fi:16}



static void Test_Ip_BFu9i_BFu16i()
{
  {
    init_simple_test("Ip_BFu9i_BFu16i");
    static STRUCT_IF_C Ip_BFu9i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu16i, Ip_BFu9i_BFu16i)
//============================================================================


struct  Ip_BFu9i_BFu16ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu9i_BFu16ll) C1{ Fp Fi:9 FL:16}



static void Test_Ip_BFu9i_BFu16ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu16ll");
    static STRUCT_IF_C Ip_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu16ll, Ip_BFu9i_BFu16ll)
//============================================================================


struct  Ip_BFu9i_BFu16s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu9i_BFu16s) C1{ Fp Fi:9 Fs:16}



static void Test_Ip_BFu9i_BFu16s()
{
  {
    init_simple_test("Ip_BFu9i_BFu16s");
    static STRUCT_IF_C Ip_BFu9i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu16s, Ip_BFu9i_BFu16s)
//============================================================================


struct  Ip_BFu9i_BFu17i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu9i_BFu17i) C1{ Fp Fi:9 Fi:17}



static void Test_Ip_BFu9i_BFu17i()
{
  {
    init_simple_test("Ip_BFu9i_BFu17i");
    static STRUCT_IF_C Ip_BFu9i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu17i, Ip_BFu9i_BFu17i)
//============================================================================


struct  Ip_BFu9i_BFu17ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu9i_BFu17ll) C1{ Fp Fi:9 FL:17}



static void Test_Ip_BFu9i_BFu17ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu17ll");
    static STRUCT_IF_C Ip_BFu9i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu17ll, Ip_BFu9i_BFu17ll)
//============================================================================


struct  Ip_BFu9i_BFu1c  {
  int *v1;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu9i_BFu1c) C1{ Fp Fi:9 Fc:1}



static void Test_Ip_BFu9i_BFu1c()
{
  {
    init_simple_test("Ip_BFu9i_BFu1c");
    static STRUCT_IF_C Ip_BFu9i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu1c, Ip_BFu9i_BFu1c)
//============================================================================


struct  Ip_BFu9i_BFu1i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu9i_BFu1i) C1{ Fp Fi:9 Fi:1}



static void Test_Ip_BFu9i_BFu1i()
{
  {
    init_simple_test("Ip_BFu9i_BFu1i");
    static STRUCT_IF_C Ip_BFu9i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu1i, Ip_BFu9i_BFu1i)
//============================================================================


struct  Ip_BFu9i_BFu1ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu9i_BFu1ll) C1{ Fp Fi:9 FL:1}



static void Test_Ip_BFu9i_BFu1ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu1ll");
    static STRUCT_IF_C Ip_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu1ll, Ip_BFu9i_BFu1ll)
//============================================================================


struct  Ip_BFu9i_BFu1s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu9i_BFu1s) C1{ Fp Fi:9 Fs:1}



static void Test_Ip_BFu9i_BFu1s()
{
  {
    init_simple_test("Ip_BFu9i_BFu1s");
    static STRUCT_IF_C Ip_BFu9i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu1s, Ip_BFu9i_BFu1s)
//============================================================================


struct  Ip_BFu9i_BFu31i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu9i_BFu31i) C1{ Fp Fi:9 Fi:31}



static void Test_Ip_BFu9i_BFu31i()
{
  {
    init_simple_test("Ip_BFu9i_BFu31i");
    static STRUCT_IF_C Ip_BFu9i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu31i, Ip_BFu9i_BFu31i)
//============================================================================


struct  Ip_BFu9i_BFu31ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu9i_BFu31ll) C1{ Fp Fi:9 FL:31}



static void Test_Ip_BFu9i_BFu31ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu31ll");
    static STRUCT_IF_C Ip_BFu9i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, 1, "Ip_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, hide_ull(1LL<<30), "Ip_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu31ll, Ip_BFu9i_BFu31ll)
//============================================================================


struct  Ip_BFu9i_BFu32i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu9i_BFu32i) C1{ Fp Fi:9 Fi:32}



static void Test_Ip_BFu9i_BFu32i()
{
  {
    init_simple_test("Ip_BFu9i_BFu32i");
    static STRUCT_IF_C Ip_BFu9i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu32i, Ip_BFu9i_BFu32i)
//============================================================================


struct  Ip_BFu9i_BFu32ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu9i_BFu32ll) C1{ Fp Fi:9 FL:32}



static void Test_Ip_BFu9i_BFu32ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu32ll");
    static STRUCT_IF_C Ip_BFu9i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, 1, "Ip_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, hide_ull(1LL<<31), "Ip_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu32ll, Ip_BFu9i_BFu32ll)
//============================================================================


struct  Ip_BFu9i_BFu33  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu9i_BFu33) C1{ Fp Fi:9 FL:33}



static void Test_Ip_BFu9i_BFu33()
{
  {
    init_simple_test("Ip_BFu9i_BFu33");
    static STRUCT_IF_C Ip_BFu9i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, 1, "Ip_BFu9i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, hide_ull(1LL<<32), "Ip_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu33, Ip_BFu9i_BFu33)
//============================================================================


struct  Ip_BFu9i_BFu7c  {
  int *v1;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu9i_BFu7c) C1{ Fp Fi:9 Fc:7}



static void Test_Ip_BFu9i_BFu7c()
{
  {
    init_simple_test("Ip_BFu9i_BFu7c");
    static STRUCT_IF_C Ip_BFu9i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu7c, Ip_BFu9i_BFu7c)
//============================================================================


struct  Ip_BFu9i_BFu7i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu9i_BFu7i) C1{ Fp Fi:9 Fi:7}



static void Test_Ip_BFu9i_BFu7i()
{
  {
    init_simple_test("Ip_BFu9i_BFu7i");
    static STRUCT_IF_C Ip_BFu9i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu7i, Ip_BFu9i_BFu7i)
//============================================================================


struct  Ip_BFu9i_BFu7ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu9i_BFu7ll) C1{ Fp Fi:9 FL:7}



static void Test_Ip_BFu9i_BFu7ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu7ll");
    static STRUCT_IF_C Ip_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu7ll, Ip_BFu9i_BFu7ll)
//============================================================================


struct  Ip_BFu9i_BFu7s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu9i_BFu7s) C1{ Fp Fi:9 Fs:7}



static void Test_Ip_BFu9i_BFu7s()
{
  {
    init_simple_test("Ip_BFu9i_BFu7s");
    static STRUCT_IF_C Ip_BFu9i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu7s, Ip_BFu9i_BFu7s)
//============================================================================


struct  Ip_BFu9i_BFu8c  {
  int *v1;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu9i_BFu8c) C1{ Fp Fi:9 Fc:8}



static void Test_Ip_BFu9i_BFu8c()
{
  {
    init_simple_test("Ip_BFu9i_BFu8c");
    static STRUCT_IF_C Ip_BFu9i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu8c, Ip_BFu9i_BFu8c)
//============================================================================


struct  Ip_BFu9i_BFu8i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu9i_BFu8i) C1{ Fp Fi:9 Fi:8}



static void Test_Ip_BFu9i_BFu8i()
{
  {
    init_simple_test("Ip_BFu9i_BFu8i");
    static STRUCT_IF_C Ip_BFu9i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu8i, Ip_BFu9i_BFu8i)
//============================================================================


struct  Ip_BFu9i_BFu8ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu9i_BFu8ll) C1{ Fp Fi:9 FL:8}



static void Test_Ip_BFu9i_BFu8ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu8ll");
    static STRUCT_IF_C Ip_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu8ll, Ip_BFu9i_BFu8ll)
//============================================================================


struct  Ip_BFu9i_BFu8s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu9i_BFu8s) C1{ Fp Fi:9 Fs:8}



static void Test_Ip_BFu9i_BFu8s()
{
  {
    init_simple_test("Ip_BFu9i_BFu8s");
    static STRUCT_IF_C Ip_BFu9i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu8s, Ip_BFu9i_BFu8s)
//============================================================================


struct  Ip_BFu9i_BFu9i  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu9i_BFu9i) C1{ Fp Fi:9 Fi:9}



static void Test_Ip_BFu9i_BFu9i()
{
  {
    init_simple_test("Ip_BFu9i_BFu9i");
    static STRUCT_IF_C Ip_BFu9i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu9i, Ip_BFu9i_BFu9i)
//============================================================================


struct  Ip_BFu9i_BFu9ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu9i_BFu9ll) C1{ Fp Fi:9 FL:9}



static void Test_Ip_BFu9i_BFu9ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu9ll");
    static STRUCT_IF_C Ip_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu9ll, Ip_BFu9i_BFu9ll)
//============================================================================


struct  Ip_BFu9i_BFu9s  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu9i_BFu9s) C1{ Fp Fi:9 Fs:9}



static void Test_Ip_BFu9i_BFu9s()
{
  {
    init_simple_test("Ip_BFu9i_BFu9s");
    static STRUCT_IF_C Ip_BFu9i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu9s, Ip_BFu9i_BFu9s)
//============================================================================


struct  Ip_BFu9i_C  {
  int *v1;
  unsigned int v2:9;
  char v3;
};
//SIG(1 Ip_BFu9i_C) C1{ Fp Fi:9 Fc}



static void Test_Ip_BFu9i_C()
{
  {
    init_simple_test("Ip_BFu9i_C");
    static STRUCT_IF_C Ip_BFu9i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_C");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_C, Ip_BFu9i_C)
//============================================================================


struct  Ip_BFu9i_D  {
  int *v1;
  unsigned int v2:9;
  double v3;
};
//SIG(1 Ip_BFu9i_D) C1{ Fp Fi:9 FL}



static void Test_Ip_BFu9i_D()
{
  {
    init_simple_test("Ip_BFu9i_D");
    static STRUCT_IF_C Ip_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_D, Ip_BFu9i_D)
//============================================================================


struct  Ip_BFu9i_F  {
  int *v1;
  unsigned int v2:9;
  float v3;
};
//SIG(1 Ip_BFu9i_F) C1{ Fp Fi:9 Fi}



static void Test_Ip_BFu9i_F()
{
  {
    init_simple_test("Ip_BFu9i_F");
    static STRUCT_IF_C Ip_BFu9i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_F, Ip_BFu9i_F)
//============================================================================


struct  Ip_BFu9i_I  {
  int *v1;
  unsigned int v2:9;
  int v3;
};
//SIG(1 Ip_BFu9i_I) C1{ Fp Fi:9 Fi}



static void Test_Ip_BFu9i_I()
{
  {
    init_simple_test("Ip_BFu9i_I");
    static STRUCT_IF_C Ip_BFu9i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_I, Ip_BFu9i_I)
//============================================================================


struct  Ip_BFu9i_Ip  {
  int *v1;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 Ip_BFu9i_Ip) C1{ Fp Fi:9 Fp}



static void Test_Ip_BFu9i_Ip()
{
  {
    init_simple_test("Ip_BFu9i_Ip");
    static STRUCT_IF_C Ip_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Ip, Ip_BFu9i_Ip)
//============================================================================


struct  Ip_BFu9i_L  {
  int *v1;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 Ip_BFu9i_L) C1{ Fp Fi:9 FL}



static void Test_Ip_BFu9i_L()
{
  {
    init_simple_test("Ip_BFu9i_L");
    static STRUCT_IF_C Ip_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_L, Ip_BFu9i_L)
//============================================================================


struct  Ip_BFu9i_S  {
  int *v1;
  unsigned int v2:9;
  short v3;
};
//SIG(1 Ip_BFu9i_S) C1{ Fp Fi:9 Fs}



static void Test_Ip_BFu9i_S()
{
  {
    init_simple_test("Ip_BFu9i_S");
    static STRUCT_IF_C Ip_BFu9i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_S, Ip_BFu9i_S)
//============================================================================


struct  Ip_BFu9i_Uc  {
  int *v1;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 Ip_BFu9i_Uc) C1{ Fp Fi:9 Fc}



static void Test_Ip_BFu9i_Uc()
{
  {
    init_simple_test("Ip_BFu9i_Uc");
    static STRUCT_IF_C Ip_BFu9i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Uc");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Uc, Ip_BFu9i_Uc)
//============================================================================


struct  Ip_BFu9i_Ui  {
  int *v1;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 Ip_BFu9i_Ui) C1{ Fp Fi:9 Fi}



static void Test_Ip_BFu9i_Ui()
{
  {
    init_simple_test("Ip_BFu9i_Ui");
    static STRUCT_IF_C Ip_BFu9i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Ui, Ip_BFu9i_Ui)
//============================================================================


struct  Ip_BFu9i_Ul  {
  int *v1;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 Ip_BFu9i_Ul) C1{ Fp Fi:9 FL}



static void Test_Ip_BFu9i_Ul()
{
  {
    init_simple_test("Ip_BFu9i_Ul");
    static STRUCT_IF_C Ip_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Ul, Ip_BFu9i_Ul)
//============================================================================


struct  Ip_BFu9i_Us  {
  int *v1;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 Ip_BFu9i_Us) C1{ Fp Fi:9 Fs}



static void Test_Ip_BFu9i_Us()
{
  {
    init_simple_test("Ip_BFu9i_Us");
    static STRUCT_IF_C Ip_BFu9i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Us, Ip_BFu9i_Us)
//============================================================================


struct  Ip_BFu9i_Vp  {
  int *v1;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 Ip_BFu9i_Vp) C1{ Fp Fi:9 Fp}



static void Test_Ip_BFu9i_Vp()
{
  {
    init_simple_test("Ip_BFu9i_Vp");
    static STRUCT_IF_C Ip_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_Vp, Ip_BFu9i_Vp)
//============================================================================


struct  Ip_BFu9ll  {
  int *v1;
  __tsu64 v2:9;
};
//SIG(1 Ip_BFu9ll) C1{ Fp FL:9}



static void Test_Ip_BFu9ll()
{
  {
    init_simple_test("Ip_BFu9ll");
    static STRUCT_IF_C Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll, Ip_BFu9ll)
//============================================================================


struct  Ip_BFu9ll_BFu15i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu9ll_BFu15i) C1{ Fp FL:9 Fi:15}



static void Test_Ip_BFu9ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu15i");
    static STRUCT_IF_C Ip_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu15i, Ip_BFu9ll_BFu15i)
//============================================================================


struct  Ip_BFu9ll_BFu15ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu9ll_BFu15ll) C1{ Fp FL:9 FL:15}



static void Test_Ip_BFu9ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu15ll, Ip_BFu9ll_BFu15ll)
//============================================================================


struct  Ip_BFu9ll_BFu15s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu9ll_BFu15s) C1{ Fp FL:9 Fs:15}



static void Test_Ip_BFu9ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu15s");
    static STRUCT_IF_C Ip_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu15s, Ip_BFu9ll_BFu15s)
//============================================================================


struct  Ip_BFu9ll_BFu16i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu9ll_BFu16i) C1{ Fp FL:9 Fi:16}



static void Test_Ip_BFu9ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu16i");
    static STRUCT_IF_C Ip_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu16i, Ip_BFu9ll_BFu16i)
//============================================================================


struct  Ip_BFu9ll_BFu16ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu9ll_BFu16ll) C1{ Fp FL:9 FL:16}



static void Test_Ip_BFu9ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu16ll, Ip_BFu9ll_BFu16ll)
//============================================================================


struct  Ip_BFu9ll_BFu16s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu9ll_BFu16s) C1{ Fp FL:9 Fs:16}



static void Test_Ip_BFu9ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu16s");
    static STRUCT_IF_C Ip_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu16s, Ip_BFu9ll_BFu16s)
//============================================================================


struct  Ip_BFu9ll_BFu17i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu9ll_BFu17i) C1{ Fp FL:9 Fi:17}



static void Test_Ip_BFu9ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu17i");
    static STRUCT_IF_C Ip_BFu9ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu17i, Ip_BFu9ll_BFu17i)
//============================================================================


struct  Ip_BFu9ll_BFu17ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu9ll_BFu17ll) C1{ Fp FL:9 FL:17}



static void Test_Ip_BFu9ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu17ll, Ip_BFu9ll_BFu17ll)
//============================================================================


struct  Ip_BFu9ll_BFu1c  {
  int *v1;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu9ll_BFu1c) C1{ Fp FL:9 Fc:1}



static void Test_Ip_BFu9ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu9ll_BFu1c");
    static STRUCT_IF_C Ip_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu1c, Ip_BFu9ll_BFu1c)
//============================================================================


struct  Ip_BFu9ll_BFu1i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu9ll_BFu1i) C1{ Fp FL:9 Fi:1}



static void Test_Ip_BFu9ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu1i");
    static STRUCT_IF_C Ip_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu1i, Ip_BFu9ll_BFu1i)
//============================================================================


struct  Ip_BFu9ll_BFu1ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu9ll_BFu1ll) C1{ Fp FL:9 FL:1}



static void Test_Ip_BFu9ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu1ll, Ip_BFu9ll_BFu1ll)
//============================================================================


struct  Ip_BFu9ll_BFu1s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu9ll_BFu1s) C1{ Fp FL:9 Fs:1}



static void Test_Ip_BFu9ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu1s");
    static STRUCT_IF_C Ip_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu1s, Ip_BFu9ll_BFu1s)
//============================================================================


struct  Ip_BFu9ll_BFu31i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu9ll_BFu31i) C1{ Fp FL:9 Fi:31}



static void Test_Ip_BFu9ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu31i");
    static STRUCT_IF_C Ip_BFu9ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu31i, Ip_BFu9ll_BFu31i)
//============================================================================


struct  Ip_BFu9ll_BFu31ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu9ll_BFu31ll) C1{ Fp FL:9 FL:31}



static void Test_Ip_BFu9ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, 1, "Ip_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, hide_ull(1LL<<30), "Ip_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu31ll, Ip_BFu9ll_BFu31ll)
//============================================================================


struct  Ip_BFu9ll_BFu32i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu9ll_BFu32i) C1{ Fp FL:9 Fi:32}



static void Test_Ip_BFu9ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu32i");
    static STRUCT_IF_C Ip_BFu9ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu32i, Ip_BFu9ll_BFu32i)
//============================================================================


struct  Ip_BFu9ll_BFu32ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu9ll_BFu32ll) C1{ Fp FL:9 FL:32}



static void Test_Ip_BFu9ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, 1, "Ip_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, hide_ull(1LL<<31), "Ip_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu32ll, Ip_BFu9ll_BFu32ll)
//============================================================================


struct  Ip_BFu9ll_BFu33  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu9ll_BFu33) C1{ Fp FL:9 FL:33}



static void Test_Ip_BFu9ll_BFu33()
{
  {
    init_simple_test("Ip_BFu9ll_BFu33");
    static STRUCT_IF_C Ip_BFu9ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, 1, "Ip_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, hide_ull(1LL<<32), "Ip_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu33, Ip_BFu9ll_BFu33)
//============================================================================


struct  Ip_BFu9ll_BFu7c  {
  int *v1;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu9ll_BFu7c) C1{ Fp FL:9 Fc:7}



static void Test_Ip_BFu9ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu9ll_BFu7c");
    static STRUCT_IF_C Ip_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu7c, Ip_BFu9ll_BFu7c)
//============================================================================


struct  Ip_BFu9ll_BFu7i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu9ll_BFu7i) C1{ Fp FL:9 Fi:7}



static void Test_Ip_BFu9ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu7i");
    static STRUCT_IF_C Ip_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu7i, Ip_BFu9ll_BFu7i)
//============================================================================


struct  Ip_BFu9ll_BFu7ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu9ll_BFu7ll) C1{ Fp FL:9 FL:7}



static void Test_Ip_BFu9ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu7ll, Ip_BFu9ll_BFu7ll)
//============================================================================


struct  Ip_BFu9ll_BFu7s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu9ll_BFu7s) C1{ Fp FL:9 Fs:7}



static void Test_Ip_BFu9ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu7s");
    static STRUCT_IF_C Ip_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu7s, Ip_BFu9ll_BFu7s)
//============================================================================


struct  Ip_BFu9ll_BFu8c  {
  int *v1;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu9ll_BFu8c) C1{ Fp FL:9 Fc:8}



static void Test_Ip_BFu9ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu9ll_BFu8c");
    static STRUCT_IF_C Ip_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu8c, Ip_BFu9ll_BFu8c)
//============================================================================


struct  Ip_BFu9ll_BFu8i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu9ll_BFu8i) C1{ Fp FL:9 Fi:8}



static void Test_Ip_BFu9ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu8i");
    static STRUCT_IF_C Ip_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu8i, Ip_BFu9ll_BFu8i)
//============================================================================


struct  Ip_BFu9ll_BFu8ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu9ll_BFu8ll) C1{ Fp FL:9 FL:8}



static void Test_Ip_BFu9ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu8ll, Ip_BFu9ll_BFu8ll)
//============================================================================


struct  Ip_BFu9ll_BFu8s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu9ll_BFu8s) C1{ Fp FL:9 Fs:8}



static void Test_Ip_BFu9ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu8s");
    static STRUCT_IF_C Ip_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu8s, Ip_BFu9ll_BFu8s)
//============================================================================


struct  Ip_BFu9ll_BFu9i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu9ll_BFu9i) C1{ Fp FL:9 Fi:9}



static void Test_Ip_BFu9ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu9i");
    static STRUCT_IF_C Ip_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu9i, Ip_BFu9ll_BFu9i)
//============================================================================


struct  Ip_BFu9ll_BFu9ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu9ll_BFu9ll) C1{ Fp FL:9 FL:9}



static void Test_Ip_BFu9ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu9ll, Ip_BFu9ll_BFu9ll)
//============================================================================


struct  Ip_BFu9ll_BFu9s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu9ll_BFu9s) C1{ Fp FL:9 Fs:9}



static void Test_Ip_BFu9ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu9s");
    static STRUCT_IF_C Ip_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu9s, Ip_BFu9ll_BFu9s)
//============================================================================


struct  Ip_BFu9ll_C  {
  int *v1;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 Ip_BFu9ll_C) C1{ Fp FL:9 Fc}



static void Test_Ip_BFu9ll_C()
{
  {
    init_simple_test("Ip_BFu9ll_C");
    static STRUCT_IF_C Ip_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_C");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_C, Ip_BFu9ll_C)
//============================================================================


struct  Ip_BFu9ll_D  {
  int *v1;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 Ip_BFu9ll_D) C1{ Fp FL:9 FL}



static void Test_Ip_BFu9ll_D()
{
  {
    init_simple_test("Ip_BFu9ll_D");
    static STRUCT_IF_C Ip_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_D, Ip_BFu9ll_D)
//============================================================================


struct  Ip_BFu9ll_F  {
  int *v1;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 Ip_BFu9ll_F) C1{ Fp FL:9 Fi}



static void Test_Ip_BFu9ll_F()
{
  {
    init_simple_test("Ip_BFu9ll_F");
    static STRUCT_IF_C Ip_BFu9ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_F, Ip_BFu9ll_F)
//============================================================================


struct  Ip_BFu9ll_I  {
  int *v1;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 Ip_BFu9ll_I) C1{ Fp FL:9 Fi}



static void Test_Ip_BFu9ll_I()
{
  {
    init_simple_test("Ip_BFu9ll_I");
    static STRUCT_IF_C Ip_BFu9ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_I, Ip_BFu9ll_I)
//============================================================================


struct  Ip_BFu9ll_Ip  {
  int *v1;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 Ip_BFu9ll_Ip) C1{ Fp FL:9 Fp}



static void Test_Ip_BFu9ll_Ip()
{
  {
    init_simple_test("Ip_BFu9ll_Ip");
    static STRUCT_IF_C Ip_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Ip, Ip_BFu9ll_Ip)
//============================================================================


struct  Ip_BFu9ll_L  {
  int *v1;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 Ip_BFu9ll_L) C1{ Fp FL:9 FL}



static void Test_Ip_BFu9ll_L()
{
  {
    init_simple_test("Ip_BFu9ll_L");
    static STRUCT_IF_C Ip_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_L, Ip_BFu9ll_L)
//============================================================================


struct  Ip_BFu9ll_S  {
  int *v1;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 Ip_BFu9ll_S) C1{ Fp FL:9 Fs}



static void Test_Ip_BFu9ll_S()
{
  {
    init_simple_test("Ip_BFu9ll_S");
    static STRUCT_IF_C Ip_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_S, Ip_BFu9ll_S)
//============================================================================


struct  Ip_BFu9ll_Uc  {
  int *v1;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 Ip_BFu9ll_Uc) C1{ Fp FL:9 Fc}



static void Test_Ip_BFu9ll_Uc()
{
  {
    init_simple_test("Ip_BFu9ll_Uc");
    static STRUCT_IF_C Ip_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Uc");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Uc, Ip_BFu9ll_Uc)
//============================================================================


struct  Ip_BFu9ll_Ui  {
  int *v1;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 Ip_BFu9ll_Ui) C1{ Fp FL:9 Fi}



static void Test_Ip_BFu9ll_Ui()
{
  {
    init_simple_test("Ip_BFu9ll_Ui");
    static STRUCT_IF_C Ip_BFu9ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Ui, Ip_BFu9ll_Ui)
//============================================================================


struct  Ip_BFu9ll_Ul  {
  int *v1;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 Ip_BFu9ll_Ul) C1{ Fp FL:9 FL}



static void Test_Ip_BFu9ll_Ul()
{
  {
    init_simple_test("Ip_BFu9ll_Ul");
    static STRUCT_IF_C Ip_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Ul, Ip_BFu9ll_Ul)
//============================================================================


struct  Ip_BFu9ll_Us  {
  int *v1;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 Ip_BFu9ll_Us) C1{ Fp FL:9 Fs}



static void Test_Ip_BFu9ll_Us()
{
  {
    init_simple_test("Ip_BFu9ll_Us");
    static STRUCT_IF_C Ip_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Us, Ip_BFu9ll_Us)
//============================================================================


struct  Ip_BFu9ll_Vp  {
  int *v1;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 Ip_BFu9ll_Vp) C1{ Fp FL:9 Fp}



static void Test_Ip_BFu9ll_Vp()
{
  {
    init_simple_test("Ip_BFu9ll_Vp");
    static STRUCT_IF_C Ip_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_Vp, Ip_BFu9ll_Vp)
//============================================================================


struct  Ip_BFu9s  {
  int *v1;
  unsigned short v2:9;
};
//SIG(1 Ip_BFu9s) C1{ Fp Fs:9}



static void Test_Ip_BFu9s()
{
  {
    init_simple_test("Ip_BFu9s");
    static STRUCT_IF_C Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s, Ip_BFu9s)
//============================================================================


struct  Ip_BFu9s_BFu15i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 Ip_BFu9s_BFu15i) C1{ Fp Fs:9 Fi:15}



static void Test_Ip_BFu9s_BFu15i()
{
  {
    init_simple_test("Ip_BFu9s_BFu15i");
    static STRUCT_IF_C Ip_BFu9s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu15i, Ip_BFu9s_BFu15i)
//============================================================================


struct  Ip_BFu9s_BFu15ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 Ip_BFu9s_BFu15ll) C1{ Fp Fs:9 FL:15}



static void Test_Ip_BFu9s_BFu15ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu15ll");
    static STRUCT_IF_C Ip_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, 1, "Ip_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 15, hide_ull(1LL<<14), "Ip_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu15ll, Ip_BFu9s_BFu15ll)
//============================================================================


struct  Ip_BFu9s_BFu15s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 Ip_BFu9s_BFu15s) C1{ Fp Fs:9 Fs:15}



static void Test_Ip_BFu9s_BFu15s()
{
  {
    init_simple_test("Ip_BFu9s_BFu15s");
    static STRUCT_IF_C Ip_BFu9s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu15s, Ip_BFu9s_BFu15s)
//============================================================================


struct  Ip_BFu9s_BFu16i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 Ip_BFu9s_BFu16i) C1{ Fp Fs:9 Fi:16}



static void Test_Ip_BFu9s_BFu16i()
{
  {
    init_simple_test("Ip_BFu9s_BFu16i");
    static STRUCT_IF_C Ip_BFu9s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu16i, Ip_BFu9s_BFu16i)
//============================================================================


struct  Ip_BFu9s_BFu16ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 Ip_BFu9s_BFu16ll) C1{ Fp Fs:9 FL:16}



static void Test_Ip_BFu9s_BFu16ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu16ll");
    static STRUCT_IF_C Ip_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, 1, "Ip_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 16, hide_ull(1LL<<15), "Ip_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu16ll, Ip_BFu9s_BFu16ll)
//============================================================================


struct  Ip_BFu9s_BFu16s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 Ip_BFu9s_BFu16s) C1{ Fp Fs:9 Fs:16}



static void Test_Ip_BFu9s_BFu16s()
{
  {
    init_simple_test("Ip_BFu9s_BFu16s");
    static STRUCT_IF_C Ip_BFu9s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu16s, Ip_BFu9s_BFu16s)
//============================================================================


struct  Ip_BFu9s_BFu17i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 Ip_BFu9s_BFu17i) C1{ Fp Fs:9 Fi:17}



static void Test_Ip_BFu9s_BFu17i()
{
  {
    init_simple_test("Ip_BFu9s_BFu17i");
    static STRUCT_IF_C Ip_BFu9s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu17i, Ip_BFu9s_BFu17i)
//============================================================================


struct  Ip_BFu9s_BFu17ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 Ip_BFu9s_BFu17ll) C1{ Fp Fs:9 FL:17}



static void Test_Ip_BFu9s_BFu17ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu17ll");
    static STRUCT_IF_C Ip_BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, 1, "Ip_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 17, hide_ull(1LL<<16), "Ip_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu17ll, Ip_BFu9s_BFu17ll)
//============================================================================


struct  Ip_BFu9s_BFu1c  {
  int *v1;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 Ip_BFu9s_BFu1c) C1{ Fp Fs:9 Fc:1}



static void Test_Ip_BFu9s_BFu1c()
{
  {
    init_simple_test("Ip_BFu9s_BFu1c");
    static STRUCT_IF_C Ip_BFu9s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu1c, Ip_BFu9s_BFu1c)
//============================================================================


struct  Ip_BFu9s_BFu1i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 Ip_BFu9s_BFu1i) C1{ Fp Fs:9 Fi:1}



static void Test_Ip_BFu9s_BFu1i()
{
  {
    init_simple_test("Ip_BFu9s_BFu1i");
    static STRUCT_IF_C Ip_BFu9s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu1i, Ip_BFu9s_BFu1i)
//============================================================================


struct  Ip_BFu9s_BFu1ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 Ip_BFu9s_BFu1ll) C1{ Fp Fs:9 FL:1}



static void Test_Ip_BFu9s_BFu1ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu1ll");
    static STRUCT_IF_C Ip_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu1ll, Ip_BFu9s_BFu1ll)
//============================================================================


struct  Ip_BFu9s_BFu1s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 Ip_BFu9s_BFu1s) C1{ Fp Fs:9 Fs:1}



static void Test_Ip_BFu9s_BFu1s()
{
  {
    init_simple_test("Ip_BFu9s_BFu1s");
    static STRUCT_IF_C Ip_BFu9s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 1, 1, "Ip_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu1s, Ip_BFu9s_BFu1s)
//============================================================================


struct  Ip_BFu9s_BFu31i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 Ip_BFu9s_BFu31i) C1{ Fp Fs:9 Fi:31}



static void Test_Ip_BFu9s_BFu31i()
{
  {
    init_simple_test("Ip_BFu9s_BFu31i");
    static STRUCT_IF_C Ip_BFu9s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu31i, Ip_BFu9s_BFu31i)
//============================================================================


struct  Ip_BFu9s_BFu31ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 Ip_BFu9s_BFu31ll) C1{ Fp Fs:9 FL:31}



static void Test_Ip_BFu9s_BFu31ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu31ll");
    static STRUCT_IF_C Ip_BFu9s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, 1, "Ip_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 31, hide_ull(1LL<<30), "Ip_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu31ll, Ip_BFu9s_BFu31ll)
//============================================================================


struct  Ip_BFu9s_BFu32i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 Ip_BFu9s_BFu32i) C1{ Fp Fs:9 Fi:32}



static void Test_Ip_BFu9s_BFu32i()
{
  {
    init_simple_test("Ip_BFu9s_BFu32i");
    static STRUCT_IF_C Ip_BFu9s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu32i, Ip_BFu9s_BFu32i)
//============================================================================


struct  Ip_BFu9s_BFu32ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 Ip_BFu9s_BFu32ll) C1{ Fp Fs:9 FL:32}



static void Test_Ip_BFu9s_BFu32ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu32ll");
    static STRUCT_IF_C Ip_BFu9s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, 1, "Ip_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 32, hide_ull(1LL<<31), "Ip_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu32ll, Ip_BFu9s_BFu32ll)
//============================================================================


struct  Ip_BFu9s_BFu33  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 Ip_BFu9s_BFu33) C1{ Fp Fs:9 FL:33}



static void Test_Ip_BFu9s_BFu33()
{
  {
    init_simple_test("Ip_BFu9s_BFu33");
    static STRUCT_IF_C Ip_BFu9s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, 1, "Ip_BFu9s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), ABISELECT(1,1), 33, hide_ull(1LL<<32), "Ip_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu33, Ip_BFu9s_BFu33)
//============================================================================


struct  Ip_BFu9s_BFu7c  {
  int *v1;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 Ip_BFu9s_BFu7c) C1{ Fp Fs:9 Fc:7}



static void Test_Ip_BFu9s_BFu7c()
{
  {
    init_simple_test("Ip_BFu9s_BFu7c");
    static STRUCT_IF_C Ip_BFu9s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu7c, Ip_BFu9s_BFu7c)
//============================================================================


struct  Ip_BFu9s_BFu7i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 Ip_BFu9s_BFu7i) C1{ Fp Fs:9 Fi:7}



static void Test_Ip_BFu9s_BFu7i()
{
  {
    init_simple_test("Ip_BFu9s_BFu7i");
    static STRUCT_IF_C Ip_BFu9s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu7i, Ip_BFu9s_BFu7i)
//============================================================================


struct  Ip_BFu9s_BFu7ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 Ip_BFu9s_BFu7ll) C1{ Fp Fs:9 FL:7}



static void Test_Ip_BFu9s_BFu7ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu7ll");
    static STRUCT_IF_C Ip_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu7ll, Ip_BFu9s_BFu7ll)
//============================================================================


struct  Ip_BFu9s_BFu7s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 Ip_BFu9s_BFu7s) C1{ Fp Fs:9 Fs:7}



static void Test_Ip_BFu9s_BFu7s()
{
  {
    init_simple_test("Ip_BFu9s_BFu7s");
    static STRUCT_IF_C Ip_BFu9s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, 1, "Ip_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 7, hide_ull(1LL<<6), "Ip_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu7s, Ip_BFu9s_BFu7s)
//============================================================================


struct  Ip_BFu9s_BFu8c  {
  int *v1;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 Ip_BFu9s_BFu8c) C1{ Fp Fs:9 Fc:8}



static void Test_Ip_BFu9s_BFu8c()
{
  {
    init_simple_test("Ip_BFu9s_BFu8c");
    static STRUCT_IF_C Ip_BFu9s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu8c, Ip_BFu9s_BFu8c)
//============================================================================


struct  Ip_BFu9s_BFu8i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 Ip_BFu9s_BFu8i) C1{ Fp Fs:9 Fi:8}



static void Test_Ip_BFu9s_BFu8i()
{
  {
    init_simple_test("Ip_BFu9s_BFu8i");
    static STRUCT_IF_C Ip_BFu9s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu8i, Ip_BFu9s_BFu8i)
//============================================================================


struct  Ip_BFu9s_BFu8ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 Ip_BFu9s_BFu8ll) C1{ Fp Fs:9 FL:8}



static void Test_Ip_BFu9s_BFu8ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu8ll");
    static STRUCT_IF_C Ip_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, 1, "Ip_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 8, hide_ull(1LL<<7), "Ip_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu8ll, Ip_BFu9s_BFu8ll)
//============================================================================


struct  Ip_BFu9s_BFu8s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 Ip_BFu9s_BFu8s) C1{ Fp Fs:9 Fs:8}



static void Test_Ip_BFu9s_BFu8s()
{
  {
    init_simple_test("Ip_BFu9s_BFu8s");
    static STRUCT_IF_C Ip_BFu9s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu8s, Ip_BFu9s_BFu8s)
//============================================================================


struct  Ip_BFu9s_BFu9i  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 Ip_BFu9s_BFu9i) C1{ Fp Fs:9 Fi:9}



static void Test_Ip_BFu9s_BFu9i()
{
  {
    init_simple_test("Ip_BFu9s_BFu9i");
    static STRUCT_IF_C Ip_BFu9s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu9i, Ip_BFu9s_BFu9i)
//============================================================================


struct  Ip_BFu9s_BFu9ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 Ip_BFu9s_BFu9ll) C1{ Fp Fs:9 FL:9}



static void Test_Ip_BFu9s_BFu9ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu9ll");
    static STRUCT_IF_C Ip_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, 1, "Ip_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 1, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu9ll, Ip_BFu9s_BFu9ll)
//============================================================================


struct  Ip_BFu9s_BFu9s  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 Ip_BFu9s_BFu9s) C1{ Fp Fs:9 Fs:9}



static void Test_Ip_BFu9s_BFu9s()
{
  {
    init_simple_test("Ip_BFu9s_BFu9s");
    static STRUCT_IF_C Ip_BFu9s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu9s, Ip_BFu9s_BFu9s)
//============================================================================


struct  Ip_BFu9s_C  {
  int *v1;
  unsigned short v2:9;
  char v3;
};
//SIG(1 Ip_BFu9s_C) C1{ Fp Fs:9 Fc}



static void Test_Ip_BFu9s_C()
{
  {
    init_simple_test("Ip_BFu9s_C");
    static STRUCT_IF_C Ip_BFu9s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_C.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_C");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_C");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_C, Ip_BFu9s_C)
//============================================================================


struct  Ip_BFu9s_D  {
  int *v1;
  unsigned short v2:9;
  double v3;
};
//SIG(1 Ip_BFu9s_D) C1{ Fp Fs:9 FL}



static void Test_Ip_BFu9s_D()
{
  {
    init_simple_test("Ip_BFu9s_D");
    static STRUCT_IF_C Ip_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_D.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_D");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_D, Ip_BFu9s_D)
//============================================================================


struct  Ip_BFu9s_F  {
  int *v1;
  unsigned short v2:9;
  float v3;
};
//SIG(1 Ip_BFu9s_F) C1{ Fp Fs:9 Fi}



static void Test_Ip_BFu9s_F()
{
  {
    init_simple_test("Ip_BFu9s_F");
    static STRUCT_IF_C Ip_BFu9s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_F.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_F");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_F");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_F, Ip_BFu9s_F)
//============================================================================


struct  Ip_BFu9s_I  {
  int *v1;
  unsigned short v2:9;
  int v3;
};
//SIG(1 Ip_BFu9s_I) C1{ Fp Fs:9 Fi}



static void Test_Ip_BFu9s_I()
{
  {
    init_simple_test("Ip_BFu9s_I");
    static STRUCT_IF_C Ip_BFu9s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_I.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_I");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_I");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_I, Ip_BFu9s_I)
//============================================================================


struct  Ip_BFu9s_Ip  {
  int *v1;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 Ip_BFu9s_Ip) C1{ Fp Fs:9 Fp}



static void Test_Ip_BFu9s_Ip()
{
  {
    init_simple_test("Ip_BFu9s_Ip");
    static STRUCT_IF_C Ip_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Ip.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Ip");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Ip, Ip_BFu9s_Ip)
//============================================================================


struct  Ip_BFu9s_L  {
  int *v1;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 Ip_BFu9s_L) C1{ Fp Fs:9 FL}



static void Test_Ip_BFu9s_L()
{
  {
    init_simple_test("Ip_BFu9s_L");
    static STRUCT_IF_C Ip_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_L.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_L");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_L, Ip_BFu9s_L)
//============================================================================


struct  Ip_BFu9s_S  {
  int *v1;
  unsigned short v2:9;
  short v3;
};
//SIG(1 Ip_BFu9s_S) C1{ Fp Fs:9 Fs}



static void Test_Ip_BFu9s_S()
{
  {
    init_simple_test("Ip_BFu9s_S");
    static STRUCT_IF_C Ip_BFu9s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_S.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_S");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_S");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_S, Ip_BFu9s_S)
//============================================================================


struct  Ip_BFu9s_Uc  {
  int *v1;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 Ip_BFu9s_Uc) C1{ Fp Fs:9 Fc}



static void Test_Ip_BFu9s_Uc()
{
  {
    init_simple_test("Ip_BFu9s_Uc");
    static STRUCT_IF_C Ip_BFu9s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Uc.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Uc");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Uc");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Uc, Ip_BFu9s_Uc)
//============================================================================


struct  Ip_BFu9s_Ui  {
  int *v1;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 Ip_BFu9s_Ui) C1{ Fp Fs:9 Fi}



static void Test_Ip_BFu9s_Ui()
{
  {
    init_simple_test("Ip_BFu9s_Ui");
    static STRUCT_IF_C Ip_BFu9s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu9s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Ui.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Ui");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Ui");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Ui, Ip_BFu9s_Ui)
//============================================================================


struct  Ip_BFu9s_Ul  {
  int *v1;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 Ip_BFu9s_Ul) C1{ Fp Fs:9 FL}



static void Test_Ip_BFu9s_Ul()
{
  {
    init_simple_test("Ip_BFu9s_Ul");
    static STRUCT_IF_C Ip_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Ul.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Ul");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Ul, Ip_BFu9s_Ul)
//============================================================================


struct  Ip_BFu9s_Us  {
  int *v1;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 Ip_BFu9s_Us) C1{ Fp Fs:9 Fs}



static void Test_Ip_BFu9s_Us()
{
  {
    init_simple_test("Ip_BFu9s_Us");
    static STRUCT_IF_C Ip_BFu9s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Us.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Us");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Us");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Us, Ip_BFu9s_Us)
//============================================================================


struct  Ip_BFu9s_Vp  {
  int *v1;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 Ip_BFu9s_Vp) C1{ Fp Fs:9 Fp}



static void Test_Ip_BFu9s_Vp()
{
  {
    init_simple_test("Ip_BFu9s_Vp");
    static STRUCT_IF_C Ip_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_Vp.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_Vp");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_Vp, Ip_BFu9s_Vp)
//============================================================================


struct  Ip_C  {
  int *v1;
  char v2;
};
//SIG(1 Ip_C) C1{ Fp Fc}



static void Test_Ip_C()
{
  {
    init_simple_test("Ip_C");
    STRUCT_IF_C Ip_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C)");
    check_field_offset(lv, v1, 0, "Ip_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C, Ip_C)
//============================================================================


struct  Ip_C_BFu15i  {
  int *v1;
  char v2;
  unsigned int v3:15;
};
//SIG(1 Ip_C_BFu15i) C1{ Fp Fc Fi:15}



static void Test_Ip_C_BFu15i()
{
  {
    init_simple_test("Ip_C_BFu15i");
    static STRUCT_IF_C Ip_C_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_C_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu15i, Ip_C_BFu15i)
//============================================================================


struct  Ip_C_BFu15ll  {
  int *v1;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_C_BFu15ll) C1{ Fp Fc FL:15}



static void Test_Ip_C_BFu15ll()
{
  {
    init_simple_test("Ip_C_BFu15ll");
    static STRUCT_IF_C Ip_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_C_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu15ll, Ip_C_BFu15ll)
//============================================================================


struct  Ip_C_BFu15s  {
  int *v1;
  char v2;
  unsigned short v3:15;
};
//SIG(1 Ip_C_BFu15s) C1{ Fp Fc Fs:15}



static void Test_Ip_C_BFu15s()
{
  {
    init_simple_test("Ip_C_BFu15s");
    static STRUCT_IF_C Ip_C_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_C_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu15s, Ip_C_BFu15s)
//============================================================================


struct  Ip_C_BFu16i  {
  int *v1;
  char v2;
  unsigned int v3:16;
};
//SIG(1 Ip_C_BFu16i) C1{ Fp Fc Fi:16}



static void Test_Ip_C_BFu16i()
{
  {
    init_simple_test("Ip_C_BFu16i");
    static STRUCT_IF_C Ip_C_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_C_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu16i, Ip_C_BFu16i)
//============================================================================


struct  Ip_C_BFu16ll  {
  int *v1;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_C_BFu16ll) C1{ Fp Fc FL:16}



static void Test_Ip_C_BFu16ll()
{
  {
    init_simple_test("Ip_C_BFu16ll");
    static STRUCT_IF_C Ip_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_C_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu16ll, Ip_C_BFu16ll)
//============================================================================


struct  Ip_C_BFu16s  {
  int *v1;
  char v2;
  unsigned short v3:16;
};
//SIG(1 Ip_C_BFu16s) C1{ Fp Fc Fs:16}



static void Test_Ip_C_BFu16s()
{
  {
    init_simple_test("Ip_C_BFu16s");
    static STRUCT_IF_C Ip_C_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_C_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu16s, Ip_C_BFu16s)
//============================================================================


struct  Ip_C_BFu17i  {
  int *v1;
  char v2;
  unsigned int v3:17;
};
//SIG(1 Ip_C_BFu17i) C1{ Fp Fc Fi:17}



static void Test_Ip_C_BFu17i()
{
  {
    init_simple_test("Ip_C_BFu17i");
    static STRUCT_IF_C Ip_C_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_C_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu17i, Ip_C_BFu17i)
//============================================================================


struct  Ip_C_BFu17ll  {
  int *v1;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_C_BFu17ll) C1{ Fp Fc FL:17}



static void Test_Ip_C_BFu17ll()
{
  {
    init_simple_test("Ip_C_BFu17ll");
    static STRUCT_IF_C Ip_C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_C_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu17ll, Ip_C_BFu17ll)
//============================================================================


struct  Ip_C_BFu1c  {
  int *v1;
  char v2;
  unsigned char v3:1;
};
//SIG(1 Ip_C_BFu1c) C1{ Fp Fc Fc:1}



static void Test_Ip_C_BFu1c()
{
  {
    init_simple_test("Ip_C_BFu1c");
    static STRUCT_IF_C Ip_C_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu1c, Ip_C_BFu1c)
//============================================================================


struct  Ip_C_BFu1i  {
  int *v1;
  char v2;
  unsigned int v3:1;
};
//SIG(1 Ip_C_BFu1i) C1{ Fp Fc Fi:1}



static void Test_Ip_C_BFu1i()
{
  {
    init_simple_test("Ip_C_BFu1i");
    static STRUCT_IF_C Ip_C_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu1i, Ip_C_BFu1i)
//============================================================================


struct  Ip_C_BFu1ll  {
  int *v1;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_C_BFu1ll) C1{ Fp Fc FL:1}



static void Test_Ip_C_BFu1ll()
{
  {
    init_simple_test("Ip_C_BFu1ll");
    static STRUCT_IF_C Ip_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu1ll, Ip_C_BFu1ll)
//============================================================================


struct  Ip_C_BFu1s  {
  int *v1;
  char v2;
  unsigned short v3:1;
};
//SIG(1 Ip_C_BFu1s) C1{ Fp Fc Fs:1}



static void Test_Ip_C_BFu1s()
{
  {
    init_simple_test("Ip_C_BFu1s");
    static STRUCT_IF_C Ip_C_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu1s, Ip_C_BFu1s)
//============================================================================


struct  Ip_C_BFu31i  {
  int *v1;
  char v2;
  unsigned int v3:31;
};
//SIG(1 Ip_C_BFu31i) C1{ Fp Fc Fi:31}



static void Test_Ip_C_BFu31i()
{
  {
    init_simple_test("Ip_C_BFu31i");
    static STRUCT_IF_C Ip_C_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_C_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu31i, Ip_C_BFu31i)
//============================================================================


struct  Ip_C_BFu31ll  {
  int *v1;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_C_BFu31ll) C1{ Fp Fc FL:31}



static void Test_Ip_C_BFu31ll()
{
  {
    init_simple_test("Ip_C_BFu31ll");
    static STRUCT_IF_C Ip_C_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_C_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu31ll, Ip_C_BFu31ll)
//============================================================================


struct  Ip_C_BFu32i  {
  int *v1;
  char v2;
  unsigned int v3:32;
};
//SIG(1 Ip_C_BFu32i) C1{ Fp Fc Fi:32}



static void Test_Ip_C_BFu32i()
{
  {
    init_simple_test("Ip_C_BFu32i");
    static STRUCT_IF_C Ip_C_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_C_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu32i, Ip_C_BFu32i)
//============================================================================


struct  Ip_C_BFu32ll  {
  int *v1;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_C_BFu32ll) C1{ Fp Fc FL:32}



static void Test_Ip_C_BFu32ll()
{
  {
    init_simple_test("Ip_C_BFu32ll");
    static STRUCT_IF_C Ip_C_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_C_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu32ll, Ip_C_BFu32ll)
//============================================================================


struct  Ip_C_BFu33  {
  int *v1;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_C_BFu33) C1{ Fp Fc FL:33}



static void Test_Ip_C_BFu33()
{
  {
    init_simple_test("Ip_C_BFu33");
    static STRUCT_IF_C Ip_C_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_C_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu33, Ip_C_BFu33)
//============================================================================


struct  Ip_C_BFu7c  {
  int *v1;
  char v2;
  unsigned char v3:7;
};
//SIG(1 Ip_C_BFu7c) C1{ Fp Fc Fc:7}



static void Test_Ip_C_BFu7c()
{
  {
    init_simple_test("Ip_C_BFu7c");
    static STRUCT_IF_C Ip_C_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_C_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu7c, Ip_C_BFu7c)
//============================================================================


struct  Ip_C_BFu7i  {
  int *v1;
  char v2;
  unsigned int v3:7;
};
//SIG(1 Ip_C_BFu7i) C1{ Fp Fc Fi:7}



static void Test_Ip_C_BFu7i()
{
  {
    init_simple_test("Ip_C_BFu7i");
    static STRUCT_IF_C Ip_C_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_C_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu7i, Ip_C_BFu7i)
//============================================================================


struct  Ip_C_BFu7ll  {
  int *v1;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_C_BFu7ll) C1{ Fp Fc FL:7}



static void Test_Ip_C_BFu7ll()
{
  {
    init_simple_test("Ip_C_BFu7ll");
    static STRUCT_IF_C Ip_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_C_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu7ll, Ip_C_BFu7ll)
//============================================================================


struct  Ip_C_BFu7s  {
  int *v1;
  char v2;
  unsigned short v3:7;
};
//SIG(1 Ip_C_BFu7s) C1{ Fp Fc Fs:7}



static void Test_Ip_C_BFu7s()
{
  {
    init_simple_test("Ip_C_BFu7s");
    static STRUCT_IF_C Ip_C_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_C_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu7s, Ip_C_BFu7s)
//============================================================================


struct  Ip_C_BFu8c  {
  int *v1;
  char v2;
  unsigned char v3:8;
};
//SIG(1 Ip_C_BFu8c) C1{ Fp Fc Fc:8}



static void Test_Ip_C_BFu8c()
{
  {
    init_simple_test("Ip_C_BFu8c");
    static STRUCT_IF_C Ip_C_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_C_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu8c, Ip_C_BFu8c)
//============================================================================


struct  Ip_C_BFu8i  {
  int *v1;
  char v2;
  unsigned int v3:8;
};
//SIG(1 Ip_C_BFu8i) C1{ Fp Fc Fi:8}



static void Test_Ip_C_BFu8i()
{
  {
    init_simple_test("Ip_C_BFu8i");
    static STRUCT_IF_C Ip_C_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_C_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu8i, Ip_C_BFu8i)
//============================================================================


struct  Ip_C_BFu8ll  {
  int *v1;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_C_BFu8ll) C1{ Fp Fc FL:8}



static void Test_Ip_C_BFu8ll()
{
  {
    init_simple_test("Ip_C_BFu8ll");
    static STRUCT_IF_C Ip_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_C_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu8ll, Ip_C_BFu8ll)
//============================================================================


struct  Ip_C_BFu8s  {
  int *v1;
  char v2;
  unsigned short v3:8;
};
//SIG(1 Ip_C_BFu8s) C1{ Fp Fc Fs:8}



static void Test_Ip_C_BFu8s()
{
  {
    init_simple_test("Ip_C_BFu8s");
    static STRUCT_IF_C Ip_C_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_C_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu8s, Ip_C_BFu8s)
//============================================================================


struct  Ip_C_BFu9i  {
  int *v1;
  char v2;
  unsigned int v3:9;
};
//SIG(1 Ip_C_BFu9i) C1{ Fp Fc Fi:9}



static void Test_Ip_C_BFu9i()
{
  {
    init_simple_test("Ip_C_BFu9i");
    static STRUCT_IF_C Ip_C_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_C_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu9i, Ip_C_BFu9i)
//============================================================================


struct  Ip_C_BFu9ll  {
  int *v1;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_C_BFu9ll) C1{ Fp Fc FL:9}



static void Test_Ip_C_BFu9ll()
{
  {
    init_simple_test("Ip_C_BFu9ll");
    static STRUCT_IF_C Ip_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_C_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu9ll, Ip_C_BFu9ll)
//============================================================================


struct  Ip_C_BFu9s  {
  int *v1;
  char v2;
  unsigned short v3:9;
};
//SIG(1 Ip_C_BFu9s) C1{ Fp Fc Fs:9}



static void Test_Ip_C_BFu9s()
{
  {
    init_simple_test("Ip_C_BFu9s");
    static STRUCT_IF_C Ip_C_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_C_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu9s, Ip_C_BFu9s)
//============================================================================


struct  Ip_C_C  {
  int *v1;
  char v2;
  char v3;
};
//SIG(1 Ip_C_C) C1{ Fp Fc[2]}



static void Test_Ip_C_C()
{
  {
    init_simple_test("Ip_C_C");
    STRUCT_IF_C Ip_C_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_C)");
    check_field_offset(lv, v1, 0, "Ip_C_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_C.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_C, Ip_C_C)
//============================================================================


struct  Ip_C_D  {
  int *v1;
  char v2;
  double v3;
};
//SIG(1 Ip_C_D) C1{ Fp Fc FL}



static void Test_Ip_C_D()
{
  {
    init_simple_test("Ip_C_D");
    STRUCT_IF_C Ip_C_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_D)");
    check_field_offset(lv, v1, 0, "Ip_C_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_D, Ip_C_D)
//============================================================================


struct  Ip_C_F  {
  int *v1;
  char v2;
  float v3;
};
//SIG(1 Ip_C_F) C1{ Fp Fc Fi}



static void Test_Ip_C_F()
{
  {
    init_simple_test("Ip_C_F");
    STRUCT_IF_C Ip_C_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_F)");
    check_field_offset(lv, v1, 0, "Ip_C_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_F, Ip_C_F)
//============================================================================


struct  Ip_C_I  {
  int *v1;
  char v2;
  int v3;
};
//SIG(1 Ip_C_I) C1{ Fp Fc Fi}



static void Test_Ip_C_I()
{
  {
    init_simple_test("Ip_C_I");
    STRUCT_IF_C Ip_C_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_I)");
    check_field_offset(lv, v1, 0, "Ip_C_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_I, Ip_C_I)
//============================================================================


struct  Ip_C_Ip  {
  int *v1;
  char v2;
  int *v3;
};
//SIG(1 Ip_C_Ip) C1{ Fp Fc Fp}



static void Test_Ip_C_Ip()
{
  {
    init_simple_test("Ip_C_Ip");
    STRUCT_IF_C Ip_C_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Ip)");
    check_field_offset(lv, v1, 0, "Ip_C_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Ip, Ip_C_Ip)
//============================================================================


struct  Ip_C_L  {
  int *v1;
  char v2;
  __tsi64 v3;
};
//SIG(1 Ip_C_L) C1{ Fp Fc FL}



static void Test_Ip_C_L()
{
  {
    init_simple_test("Ip_C_L");
    STRUCT_IF_C Ip_C_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_L)");
    check_field_offset(lv, v1, 0, "Ip_C_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_L, Ip_C_L)
//============================================================================


struct  Ip_C_S  {
  int *v1;
  char v2;
  short v3;
};
//SIG(1 Ip_C_S) C1{ Fp Fc Fs}



static void Test_Ip_C_S()
{
  {
    init_simple_test("Ip_C_S");
    STRUCT_IF_C Ip_C_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_S)");
    check_field_offset(lv, v1, 0, "Ip_C_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_S.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_S, Ip_C_S)
//============================================================================


struct  Ip_C_Uc  {
  int *v1;
  char v2;
  unsigned char v3;
};
//SIG(1 Ip_C_Uc) C1{ Fp Fc[2]}



static void Test_Ip_C_Uc()
{
  {
    init_simple_test("Ip_C_Uc");
    STRUCT_IF_C Ip_C_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Uc)");
    check_field_offset(lv, v1, 0, "Ip_C_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Uc, Ip_C_Uc)
//============================================================================


struct  Ip_C_Ui  {
  int *v1;
  char v2;
  unsigned int v3;
};
//SIG(1 Ip_C_Ui) C1{ Fp Fc Fi}



static void Test_Ip_C_Ui()
{
  {
    init_simple_test("Ip_C_Ui");
    STRUCT_IF_C Ip_C_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_C_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Ui)");
    check_field_offset(lv, v1, 0, "Ip_C_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Ui, Ip_C_Ui)
//============================================================================


struct  Ip_C_Ul  {
  int *v1;
  char v2;
  __tsu64 v3;
};
//SIG(1 Ip_C_Ul) C1{ Fp Fc FL}



static void Test_Ip_C_Ul()
{
  {
    init_simple_test("Ip_C_Ul");
    STRUCT_IF_C Ip_C_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Ul)");
    check_field_offset(lv, v1, 0, "Ip_C_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Ul, Ip_C_Ul)
//============================================================================


struct  Ip_C_Us  {
  int *v1;
  char v2;
  unsigned short v3;
};
//SIG(1 Ip_C_Us) C1{ Fp Fc Fs}



static void Test_Ip_C_Us()
{
  {
    init_simple_test("Ip_C_Us");
    STRUCT_IF_C Ip_C_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Us)");
    check_field_offset(lv, v1, 0, "Ip_C_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Us.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Us, Ip_C_Us)
//============================================================================


struct  Ip_C_Vp  {
  int *v1;
  char v2;
  void *v3;
};
//SIG(1 Ip_C_Vp) C1{ Fp Fc Fp}



static void Test_Ip_C_Vp()
{
  {
    init_simple_test("Ip_C_Vp");
    STRUCT_IF_C Ip_C_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_Vp)");
    check_field_offset(lv, v1, 0, "Ip_C_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_Vp, Ip_C_Vp)
//============================================================================


struct  Ip_D  {
  int *v1;
  double v2;
};
//SIG(1 Ip_D) C1{ Fp FL}



static void Test_Ip_D()
{
  {
    init_simple_test("Ip_D");
    STRUCT_IF_C Ip_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D)");
    check_field_offset(lv, v1, 0, "Ip_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D, Ip_D)
//============================================================================


struct  Ip_D_BFu15i  {
  int *v1;
  double v2;
  unsigned int v3:15;
};
//SIG(1 Ip_D_BFu15i) C1{ Fp FL Fi:15}



static void Test_Ip_D_BFu15i()
{
  {
    init_simple_test("Ip_D_BFu15i");
    static STRUCT_IF_C Ip_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu15i, Ip_D_BFu15i)
//============================================================================


struct  Ip_D_BFu15ll  {
  int *v1;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_D_BFu15ll) C1{ Fp FL FL:15}



static void Test_Ip_D_BFu15ll()
{
  {
    init_simple_test("Ip_D_BFu15ll");
    static STRUCT_IF_C Ip_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu15ll, Ip_D_BFu15ll)
//============================================================================


struct  Ip_D_BFu15s  {
  int *v1;
  double v2;
  unsigned short v3:15;
};
//SIG(1 Ip_D_BFu15s) C1{ Fp FL Fs:15}



static void Test_Ip_D_BFu15s()
{
  {
    init_simple_test("Ip_D_BFu15s");
    static STRUCT_IF_C Ip_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu15s, Ip_D_BFu15s)
//============================================================================


struct  Ip_D_BFu16i  {
  int *v1;
  double v2;
  unsigned int v3:16;
};
//SIG(1 Ip_D_BFu16i) C1{ Fp FL Fi:16}



static void Test_Ip_D_BFu16i()
{
  {
    init_simple_test("Ip_D_BFu16i");
    static STRUCT_IF_C Ip_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu16i, Ip_D_BFu16i)
//============================================================================


struct  Ip_D_BFu16ll  {
  int *v1;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_D_BFu16ll) C1{ Fp FL FL:16}



static void Test_Ip_D_BFu16ll()
{
  {
    init_simple_test("Ip_D_BFu16ll");
    static STRUCT_IF_C Ip_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu16ll, Ip_D_BFu16ll)
//============================================================================


struct  Ip_D_BFu16s  {
  int *v1;
  double v2;
  unsigned short v3:16;
};
//SIG(1 Ip_D_BFu16s) C1{ Fp FL Fs:16}



static void Test_Ip_D_BFu16s()
{
  {
    init_simple_test("Ip_D_BFu16s");
    static STRUCT_IF_C Ip_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu16s, Ip_D_BFu16s)
//============================================================================


struct  Ip_D_BFu17i  {
  int *v1;
  double v2;
  unsigned int v3:17;
};
//SIG(1 Ip_D_BFu17i) C1{ Fp FL Fi:17}



static void Test_Ip_D_BFu17i()
{
  {
    init_simple_test("Ip_D_BFu17i");
    static STRUCT_IF_C Ip_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu17i, Ip_D_BFu17i)
//============================================================================


struct  Ip_D_BFu17ll  {
  int *v1;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_D_BFu17ll) C1{ Fp FL FL:17}



static void Test_Ip_D_BFu17ll()
{
  {
    init_simple_test("Ip_D_BFu17ll");
    static STRUCT_IF_C Ip_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu17ll, Ip_D_BFu17ll)
//============================================================================


struct  Ip_D_BFu1c  {
  int *v1;
  double v2;
  unsigned char v3:1;
};
//SIG(1 Ip_D_BFu1c) C1{ Fp FL Fc:1}



static void Test_Ip_D_BFu1c()
{
  {
    init_simple_test("Ip_D_BFu1c");
    static STRUCT_IF_C Ip_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu1c, Ip_D_BFu1c)
//============================================================================


struct  Ip_D_BFu1i  {
  int *v1;
  double v2;
  unsigned int v3:1;
};
//SIG(1 Ip_D_BFu1i) C1{ Fp FL Fi:1}



static void Test_Ip_D_BFu1i()
{
  {
    init_simple_test("Ip_D_BFu1i");
    static STRUCT_IF_C Ip_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu1i, Ip_D_BFu1i)
//============================================================================


struct  Ip_D_BFu1ll  {
  int *v1;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_D_BFu1ll) C1{ Fp FL FL:1}



static void Test_Ip_D_BFu1ll()
{
  {
    init_simple_test("Ip_D_BFu1ll");
    static STRUCT_IF_C Ip_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu1ll, Ip_D_BFu1ll)
//============================================================================


struct  Ip_D_BFu1s  {
  int *v1;
  double v2;
  unsigned short v3:1;
};
//SIG(1 Ip_D_BFu1s) C1{ Fp FL Fs:1}



static void Test_Ip_D_BFu1s()
{
  {
    init_simple_test("Ip_D_BFu1s");
    static STRUCT_IF_C Ip_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu1s, Ip_D_BFu1s)
//============================================================================


struct  Ip_D_BFu31i  {
  int *v1;
  double v2;
  unsigned int v3:31;
};
//SIG(1 Ip_D_BFu31i) C1{ Fp FL Fi:31}



static void Test_Ip_D_BFu31i()
{
  {
    init_simple_test("Ip_D_BFu31i");
    static STRUCT_IF_C Ip_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu31i, Ip_D_BFu31i)
//============================================================================


struct  Ip_D_BFu31ll  {
  int *v1;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_D_BFu31ll) C1{ Fp FL FL:31}



static void Test_Ip_D_BFu31ll()
{
  {
    init_simple_test("Ip_D_BFu31ll");
    static STRUCT_IF_C Ip_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu31ll, Ip_D_BFu31ll)
//============================================================================


struct  Ip_D_BFu32i  {
  int *v1;
  double v2;
  unsigned int v3:32;
};
//SIG(1 Ip_D_BFu32i) C1{ Fp FL Fi:32}



static void Test_Ip_D_BFu32i()
{
  {
    init_simple_test("Ip_D_BFu32i");
    static STRUCT_IF_C Ip_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu32i, Ip_D_BFu32i)
//============================================================================


struct  Ip_D_BFu32ll  {
  int *v1;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_D_BFu32ll) C1{ Fp FL FL:32}



static void Test_Ip_D_BFu32ll()
{
  {
    init_simple_test("Ip_D_BFu32ll");
    static STRUCT_IF_C Ip_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu32ll, Ip_D_BFu32ll)
//============================================================================


struct  Ip_D_BFu33  {
  int *v1;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_D_BFu33) C1{ Fp FL FL:33}



static void Test_Ip_D_BFu33()
{
  {
    init_simple_test("Ip_D_BFu33");
    static STRUCT_IF_C Ip_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Ip_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Ip_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu33, Ip_D_BFu33)
//============================================================================


struct  Ip_D_BFu7c  {
  int *v1;
  double v2;
  unsigned char v3:7;
};
//SIG(1 Ip_D_BFu7c) C1{ Fp FL Fc:7}



static void Test_Ip_D_BFu7c()
{
  {
    init_simple_test("Ip_D_BFu7c");
    static STRUCT_IF_C Ip_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu7c, Ip_D_BFu7c)
//============================================================================


struct  Ip_D_BFu7i  {
  int *v1;
  double v2;
  unsigned int v3:7;
};
//SIG(1 Ip_D_BFu7i) C1{ Fp FL Fi:7}



static void Test_Ip_D_BFu7i()
{
  {
    init_simple_test("Ip_D_BFu7i");
    static STRUCT_IF_C Ip_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu7i, Ip_D_BFu7i)
//============================================================================


struct  Ip_D_BFu7ll  {
  int *v1;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_D_BFu7ll) C1{ Fp FL FL:7}



static void Test_Ip_D_BFu7ll()
{
  {
    init_simple_test("Ip_D_BFu7ll");
    static STRUCT_IF_C Ip_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu7ll, Ip_D_BFu7ll)
//============================================================================


struct  Ip_D_BFu7s  {
  int *v1;
  double v2;
  unsigned short v3:7;
};
//SIG(1 Ip_D_BFu7s) C1{ Fp FL Fs:7}



static void Test_Ip_D_BFu7s()
{
  {
    init_simple_test("Ip_D_BFu7s");
    static STRUCT_IF_C Ip_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu7s, Ip_D_BFu7s)
//============================================================================


struct  Ip_D_BFu8c  {
  int *v1;
  double v2;
  unsigned char v3:8;
};
//SIG(1 Ip_D_BFu8c) C1{ Fp FL Fc:8}



static void Test_Ip_D_BFu8c()
{
  {
    init_simple_test("Ip_D_BFu8c");
    static STRUCT_IF_C Ip_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu8c, Ip_D_BFu8c)
//============================================================================


struct  Ip_D_BFu8i  {
  int *v1;
  double v2;
  unsigned int v3:8;
};
//SIG(1 Ip_D_BFu8i) C1{ Fp FL Fi:8}



static void Test_Ip_D_BFu8i()
{
  {
    init_simple_test("Ip_D_BFu8i");
    static STRUCT_IF_C Ip_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu8i, Ip_D_BFu8i)
//============================================================================


struct  Ip_D_BFu8ll  {
  int *v1;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_D_BFu8ll) C1{ Fp FL FL:8}



static void Test_Ip_D_BFu8ll()
{
  {
    init_simple_test("Ip_D_BFu8ll");
    static STRUCT_IF_C Ip_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu8ll, Ip_D_BFu8ll)
//============================================================================


struct  Ip_D_BFu8s  {
  int *v1;
  double v2;
  unsigned short v3:8;
};
//SIG(1 Ip_D_BFu8s) C1{ Fp FL Fs:8}



static void Test_Ip_D_BFu8s()
{
  {
    init_simple_test("Ip_D_BFu8s");
    static STRUCT_IF_C Ip_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu8s, Ip_D_BFu8s)
//============================================================================


struct  Ip_D_BFu9i  {
  int *v1;
  double v2;
  unsigned int v3:9;
};
//SIG(1 Ip_D_BFu9i) C1{ Fp FL Fi:9}



static void Test_Ip_D_BFu9i()
{
  {
    init_simple_test("Ip_D_BFu9i");
    static STRUCT_IF_C Ip_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu9i, Ip_D_BFu9i)
//============================================================================


struct  Ip_D_BFu9ll  {
  int *v1;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_D_BFu9ll) C1{ Fp FL FL:9}



static void Test_Ip_D_BFu9ll()
{
  {
    init_simple_test("Ip_D_BFu9ll");
    static STRUCT_IF_C Ip_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu9ll, Ip_D_BFu9ll)
//============================================================================


struct  Ip_D_BFu9s  {
  int *v1;
  double v2;
  unsigned short v3:9;
};
//SIG(1 Ip_D_BFu9s) C1{ Fp FL Fs:9}



static void Test_Ip_D_BFu9s()
{
  {
    init_simple_test("Ip_D_BFu9s");
    static STRUCT_IF_C Ip_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu9s, Ip_D_BFu9s)
//============================================================================


struct  Ip_D_C  {
  int *v1;
  double v2;
  char v3;
};
//SIG(1 Ip_D_C) C1{ Fp FL Fc}



static void Test_Ip_D_C()
{
  {
    init_simple_test("Ip_D_C");
    STRUCT_IF_C Ip_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_C)");
    check_field_offset(lv, v1, 0, "Ip_D_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_C, Ip_D_C)
//============================================================================


struct  Ip_D_D  {
  int *v1;
  double v2;
  double v3;
};
//SIG(1 Ip_D_D) C1{ Fp FL[2]}



static void Test_Ip_D_D()
{
  {
    init_simple_test("Ip_D_D");
    STRUCT_IF_C Ip_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_D)");
    check_field_offset(lv, v1, 0, "Ip_D_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_D, Ip_D_D)
//============================================================================


struct  Ip_D_F  {
  int *v1;
  double v2;
  float v3;
};
//SIG(1 Ip_D_F) C1{ Fp FL Fi}



static void Test_Ip_D_F()
{
  {
    init_simple_test("Ip_D_F");
    STRUCT_IF_C Ip_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_F)");
    check_field_offset(lv, v1, 0, "Ip_D_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_F, Ip_D_F)
//============================================================================


struct  Ip_D_I  {
  int *v1;
  double v2;
  int v3;
};
//SIG(1 Ip_D_I) C1{ Fp FL Fi}



static void Test_Ip_D_I()
{
  {
    init_simple_test("Ip_D_I");
    STRUCT_IF_C Ip_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_I)");
    check_field_offset(lv, v1, 0, "Ip_D_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_I, Ip_D_I)
//============================================================================


struct  Ip_D_Ip  {
  int *v1;
  double v2;
  int *v3;
};
//SIG(1 Ip_D_Ip) C1{ Fp FL Fp}



static void Test_Ip_D_Ip()
{
  {
    init_simple_test("Ip_D_Ip");
    STRUCT_IF_C Ip_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Ip)");
    check_field_offset(lv, v1, 0, "Ip_D_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Ip, Ip_D_Ip)
//============================================================================


struct  Ip_D_L  {
  int *v1;
  double v2;
  __tsi64 v3;
};
//SIG(1 Ip_D_L) C1{ Fp FL[2]}



static void Test_Ip_D_L()
{
  {
    init_simple_test("Ip_D_L");
    STRUCT_IF_C Ip_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_L)");
    check_field_offset(lv, v1, 0, "Ip_D_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_L, Ip_D_L)
//============================================================================


struct  Ip_D_S  {
  int *v1;
  double v2;
  short v3;
};
//SIG(1 Ip_D_S) C1{ Fp FL Fs}



static void Test_Ip_D_S()
{
  {
    init_simple_test("Ip_D_S");
    STRUCT_IF_C Ip_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_S)");
    check_field_offset(lv, v1, 0, "Ip_D_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_S, Ip_D_S)
//============================================================================


struct  Ip_D_Uc  {
  int *v1;
  double v2;
  unsigned char v3;
};
//SIG(1 Ip_D_Uc) C1{ Fp FL Fc}



static void Test_Ip_D_Uc()
{
  {
    init_simple_test("Ip_D_Uc");
    STRUCT_IF_C Ip_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Uc)");
    check_field_offset(lv, v1, 0, "Ip_D_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Uc, Ip_D_Uc)
//============================================================================


struct  Ip_D_Ui  {
  int *v1;
  double v2;
  unsigned int v3;
};
//SIG(1 Ip_D_Ui) C1{ Fp FL Fi}



static void Test_Ip_D_Ui()
{
  {
    init_simple_test("Ip_D_Ui");
    STRUCT_IF_C Ip_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Ui)");
    check_field_offset(lv, v1, 0, "Ip_D_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Ui, Ip_D_Ui)
//============================================================================


struct  Ip_D_Ul  {
  int *v1;
  double v2;
  __tsu64 v3;
};
//SIG(1 Ip_D_Ul) C1{ Fp FL[2]}



static void Test_Ip_D_Ul()
{
  {
    init_simple_test("Ip_D_Ul");
    STRUCT_IF_C Ip_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Ul)");
    check_field_offset(lv, v1, 0, "Ip_D_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Ul, Ip_D_Ul)
//============================================================================


struct  Ip_D_Us  {
  int *v1;
  double v2;
  unsigned short v3;
};
//SIG(1 Ip_D_Us) C1{ Fp FL Fs}



static void Test_Ip_D_Us()
{
  {
    init_simple_test("Ip_D_Us");
    STRUCT_IF_C Ip_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Us)");
    check_field_offset(lv, v1, 0, "Ip_D_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Us, Ip_D_Us)
//============================================================================


struct  Ip_D_Vp  {
  int *v1;
  double v2;
  void *v3;
};
//SIG(1 Ip_D_Vp) C1{ Fp FL Fp}



static void Test_Ip_D_Vp()
{
  {
    init_simple_test("Ip_D_Vp");
    STRUCT_IF_C Ip_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_Vp)");
    check_field_offset(lv, v1, 0, "Ip_D_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_Vp, Ip_D_Vp)
//============================================================================


struct  Ip_F  {
  int *v1;
  float v2;
};
//SIG(1 Ip_F) C1{ Fp Fi}



static void Test_Ip_F()
{
  {
    init_simple_test("Ip_F");
    STRUCT_IF_C Ip_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F)");
    check_field_offset(lv, v1, 0, "Ip_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F, Ip_F)
//============================================================================


struct  Ip_F_BFu15i  {
  int *v1;
  float v2;
  unsigned int v3:15;
};
//SIG(1 Ip_F_BFu15i) C1{ Fp Fi Fi:15}



static void Test_Ip_F_BFu15i()
{
  {
    init_simple_test("Ip_F_BFu15i");
    static STRUCT_IF_C Ip_F_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_F_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu15i, Ip_F_BFu15i)
//============================================================================


struct  Ip_F_BFu15ll  {
  int *v1;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_F_BFu15ll) C1{ Fp Fi FL:15}



static void Test_Ip_F_BFu15ll()
{
  {
    init_simple_test("Ip_F_BFu15ll");
    static STRUCT_IF_C Ip_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_F_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu15ll, Ip_F_BFu15ll)
//============================================================================


struct  Ip_F_BFu15s  {
  int *v1;
  float v2;
  unsigned short v3:15;
};
//SIG(1 Ip_F_BFu15s) C1{ Fp Fi Fs:15}



static void Test_Ip_F_BFu15s()
{
  {
    init_simple_test("Ip_F_BFu15s");
    static STRUCT_IF_C Ip_F_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_F_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu15s, Ip_F_BFu15s)
//============================================================================


struct  Ip_F_BFu16i  {
  int *v1;
  float v2;
  unsigned int v3:16;
};
//SIG(1 Ip_F_BFu16i) C1{ Fp Fi Fi:16}



static void Test_Ip_F_BFu16i()
{
  {
    init_simple_test("Ip_F_BFu16i");
    static STRUCT_IF_C Ip_F_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_F_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu16i, Ip_F_BFu16i)
//============================================================================


struct  Ip_F_BFu16ll  {
  int *v1;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_F_BFu16ll) C1{ Fp Fi FL:16}



static void Test_Ip_F_BFu16ll()
{
  {
    init_simple_test("Ip_F_BFu16ll");
    static STRUCT_IF_C Ip_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_F_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu16ll, Ip_F_BFu16ll)
//============================================================================


struct  Ip_F_BFu16s  {
  int *v1;
  float v2;
  unsigned short v3:16;
};
//SIG(1 Ip_F_BFu16s) C1{ Fp Fi Fs:16}



static void Test_Ip_F_BFu16s()
{
  {
    init_simple_test("Ip_F_BFu16s");
    static STRUCT_IF_C Ip_F_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_F_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu16s, Ip_F_BFu16s)
//============================================================================


struct  Ip_F_BFu17i  {
  int *v1;
  float v2;
  unsigned int v3:17;
};
//SIG(1 Ip_F_BFu17i) C1{ Fp Fi Fi:17}



static void Test_Ip_F_BFu17i()
{
  {
    init_simple_test("Ip_F_BFu17i");
    static STRUCT_IF_C Ip_F_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_F_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu17i, Ip_F_BFu17i)
//============================================================================


struct  Ip_F_BFu17ll  {
  int *v1;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_F_BFu17ll) C1{ Fp Fi FL:17}



static void Test_Ip_F_BFu17ll()
{
  {
    init_simple_test("Ip_F_BFu17ll");
    static STRUCT_IF_C Ip_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_F_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu17ll, Ip_F_BFu17ll)
//============================================================================


struct  Ip_F_BFu1c  {
  int *v1;
  float v2;
  unsigned char v3:1;
};
//SIG(1 Ip_F_BFu1c) C1{ Fp Fi Fc:1}



static void Test_Ip_F_BFu1c()
{
  {
    init_simple_test("Ip_F_BFu1c");
    static STRUCT_IF_C Ip_F_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu1c, Ip_F_BFu1c)
//============================================================================


struct  Ip_F_BFu1i  {
  int *v1;
  float v2;
  unsigned int v3:1;
};
//SIG(1 Ip_F_BFu1i) C1{ Fp Fi Fi:1}



static void Test_Ip_F_BFu1i()
{
  {
    init_simple_test("Ip_F_BFu1i");
    static STRUCT_IF_C Ip_F_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu1i, Ip_F_BFu1i)
//============================================================================


struct  Ip_F_BFu1ll  {
  int *v1;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_F_BFu1ll) C1{ Fp Fi FL:1}



static void Test_Ip_F_BFu1ll()
{
  {
    init_simple_test("Ip_F_BFu1ll");
    static STRUCT_IF_C Ip_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu1ll, Ip_F_BFu1ll)
//============================================================================


struct  Ip_F_BFu1s  {
  int *v1;
  float v2;
  unsigned short v3:1;
};
//SIG(1 Ip_F_BFu1s) C1{ Fp Fi Fs:1}



static void Test_Ip_F_BFu1s()
{
  {
    init_simple_test("Ip_F_BFu1s");
    static STRUCT_IF_C Ip_F_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu1s, Ip_F_BFu1s)
//============================================================================


struct  Ip_F_BFu31i  {
  int *v1;
  float v2;
  unsigned int v3:31;
};
//SIG(1 Ip_F_BFu31i) C1{ Fp Fi Fi:31}



static void Test_Ip_F_BFu31i()
{
  {
    init_simple_test("Ip_F_BFu31i");
    static STRUCT_IF_C Ip_F_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_F_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu31i, Ip_F_BFu31i)
//============================================================================


struct  Ip_F_BFu31ll  {
  int *v1;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_F_BFu31ll) C1{ Fp Fi FL:31}



static void Test_Ip_F_BFu31ll()
{
  {
    init_simple_test("Ip_F_BFu31ll");
    static STRUCT_IF_C Ip_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_F_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu31ll, Ip_F_BFu31ll)
//============================================================================


struct  Ip_F_BFu32i  {
  int *v1;
  float v2;
  unsigned int v3:32;
};
//SIG(1 Ip_F_BFu32i) C1{ Fp Fi Fi:32}



static void Test_Ip_F_BFu32i()
{
  {
    init_simple_test("Ip_F_BFu32i");
    static STRUCT_IF_C Ip_F_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_F_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu32i, Ip_F_BFu32i)
//============================================================================


struct  Ip_F_BFu32ll  {
  int *v1;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_F_BFu32ll) C1{ Fp Fi FL:32}



static void Test_Ip_F_BFu32ll()
{
  {
    init_simple_test("Ip_F_BFu32ll");
    static STRUCT_IF_C Ip_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_F_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu32ll, Ip_F_BFu32ll)
//============================================================================


struct  Ip_F_BFu33  {
  int *v1;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_F_BFu33) C1{ Fp Fi FL:33}



static void Test_Ip_F_BFu33()
{
  {
    init_simple_test("Ip_F_BFu33");
    static STRUCT_IF_C Ip_F_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_F_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu33, Ip_F_BFu33)
//============================================================================


struct  Ip_F_BFu7c  {
  int *v1;
  float v2;
  unsigned char v3:7;
};
//SIG(1 Ip_F_BFu7c) C1{ Fp Fi Fc:7}



static void Test_Ip_F_BFu7c()
{
  {
    init_simple_test("Ip_F_BFu7c");
    static STRUCT_IF_C Ip_F_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_F_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu7c, Ip_F_BFu7c)
//============================================================================


struct  Ip_F_BFu7i  {
  int *v1;
  float v2;
  unsigned int v3:7;
};
//SIG(1 Ip_F_BFu7i) C1{ Fp Fi Fi:7}



static void Test_Ip_F_BFu7i()
{
  {
    init_simple_test("Ip_F_BFu7i");
    static STRUCT_IF_C Ip_F_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_F_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu7i, Ip_F_BFu7i)
//============================================================================


struct  Ip_F_BFu7ll  {
  int *v1;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_F_BFu7ll) C1{ Fp Fi FL:7}



static void Test_Ip_F_BFu7ll()
{
  {
    init_simple_test("Ip_F_BFu7ll");
    static STRUCT_IF_C Ip_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_F_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu7ll, Ip_F_BFu7ll)
//============================================================================


struct  Ip_F_BFu7s  {
  int *v1;
  float v2;
  unsigned short v3:7;
};
//SIG(1 Ip_F_BFu7s) C1{ Fp Fi Fs:7}



static void Test_Ip_F_BFu7s()
{
  {
    init_simple_test("Ip_F_BFu7s");
    static STRUCT_IF_C Ip_F_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_F_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu7s, Ip_F_BFu7s)
//============================================================================


struct  Ip_F_BFu8c  {
  int *v1;
  float v2;
  unsigned char v3:8;
};
//SIG(1 Ip_F_BFu8c) C1{ Fp Fi Fc:8}



static void Test_Ip_F_BFu8c()
{
  {
    init_simple_test("Ip_F_BFu8c");
    static STRUCT_IF_C Ip_F_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_F_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu8c, Ip_F_BFu8c)
//============================================================================


struct  Ip_F_BFu8i  {
  int *v1;
  float v2;
  unsigned int v3:8;
};
//SIG(1 Ip_F_BFu8i) C1{ Fp Fi Fi:8}



static void Test_Ip_F_BFu8i()
{
  {
    init_simple_test("Ip_F_BFu8i");
    static STRUCT_IF_C Ip_F_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_F_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu8i, Ip_F_BFu8i)
//============================================================================


struct  Ip_F_BFu8ll  {
  int *v1;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_F_BFu8ll) C1{ Fp Fi FL:8}



static void Test_Ip_F_BFu8ll()
{
  {
    init_simple_test("Ip_F_BFu8ll");
    static STRUCT_IF_C Ip_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_F_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu8ll, Ip_F_BFu8ll)
//============================================================================


struct  Ip_F_BFu8s  {
  int *v1;
  float v2;
  unsigned short v3:8;
};
//SIG(1 Ip_F_BFu8s) C1{ Fp Fi Fs:8}



static void Test_Ip_F_BFu8s()
{
  {
    init_simple_test("Ip_F_BFu8s");
    static STRUCT_IF_C Ip_F_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_F_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu8s, Ip_F_BFu8s)
//============================================================================


struct  Ip_F_BFu9i  {
  int *v1;
  float v2;
  unsigned int v3:9;
};
//SIG(1 Ip_F_BFu9i) C1{ Fp Fi Fi:9}



static void Test_Ip_F_BFu9i()
{
  {
    init_simple_test("Ip_F_BFu9i");
    static STRUCT_IF_C Ip_F_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_F_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu9i, Ip_F_BFu9i)
//============================================================================


struct  Ip_F_BFu9ll  {
  int *v1;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_F_BFu9ll) C1{ Fp Fi FL:9}



static void Test_Ip_F_BFu9ll()
{
  {
    init_simple_test("Ip_F_BFu9ll");
    static STRUCT_IF_C Ip_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_F_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu9ll, Ip_F_BFu9ll)
//============================================================================


struct  Ip_F_BFu9s  {
  int *v1;
  float v2;
  unsigned short v3:9;
};
//SIG(1 Ip_F_BFu9s) C1{ Fp Fi Fs:9}



static void Test_Ip_F_BFu9s()
{
  {
    init_simple_test("Ip_F_BFu9s");
    static STRUCT_IF_C Ip_F_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_F_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu9s, Ip_F_BFu9s)
//============================================================================


struct  Ip_F_C  {
  int *v1;
  float v2;
  char v3;
};
//SIG(1 Ip_F_C) C1{ Fp Fi Fc}



static void Test_Ip_F_C()
{
  {
    init_simple_test("Ip_F_C");
    STRUCT_IF_C Ip_F_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_C)");
    check_field_offset(lv, v1, 0, "Ip_F_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_C.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_C, Ip_F_C)
//============================================================================


struct  Ip_F_D  {
  int *v1;
  float v2;
  double v3;
};
//SIG(1 Ip_F_D) C1{ Fp Fi FL}



static void Test_Ip_F_D()
{
  {
    init_simple_test("Ip_F_D");
    STRUCT_IF_C Ip_F_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_D)");
    check_field_offset(lv, v1, 0, "Ip_F_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_D, Ip_F_D)
//============================================================================


struct  Ip_F_F  {
  int *v1;
  float v2;
  float v3;
};
//SIG(1 Ip_F_F) C1{ Fp Fi[2]}



static void Test_Ip_F_F()
{
  {
    init_simple_test("Ip_F_F");
    STRUCT_IF_C Ip_F_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_F)");
    check_field_offset(lv, v1, 0, "Ip_F_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_F, Ip_F_F)
//============================================================================


struct  Ip_F_I  {
  int *v1;
  float v2;
  int v3;
};
//SIG(1 Ip_F_I) C1{ Fp Fi[2]}



static void Test_Ip_F_I()
{
  {
    init_simple_test("Ip_F_I");
    STRUCT_IF_C Ip_F_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_I)");
    check_field_offset(lv, v1, 0, "Ip_F_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_I, Ip_F_I)
//============================================================================


struct  Ip_F_Ip  {
  int *v1;
  float v2;
  int *v3;
};
//SIG(1 Ip_F_Ip) C1{ Fp Fi Fp}



static void Test_Ip_F_Ip()
{
  {
    init_simple_test("Ip_F_Ip");
    STRUCT_IF_C Ip_F_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Ip)");
    check_field_offset(lv, v1, 0, "Ip_F_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Ip, Ip_F_Ip)
//============================================================================


struct  Ip_F_L  {
  int *v1;
  float v2;
  __tsi64 v3;
};
//SIG(1 Ip_F_L) C1{ Fp Fi FL}



static void Test_Ip_F_L()
{
  {
    init_simple_test("Ip_F_L");
    STRUCT_IF_C Ip_F_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_L)");
    check_field_offset(lv, v1, 0, "Ip_F_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_L, Ip_F_L)
//============================================================================


struct  Ip_F_S  {
  int *v1;
  float v2;
  short v3;
};
//SIG(1 Ip_F_S) C1{ Fp Fi Fs}



static void Test_Ip_F_S()
{
  {
    init_simple_test("Ip_F_S");
    STRUCT_IF_C Ip_F_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_S)");
    check_field_offset(lv, v1, 0, "Ip_F_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_S.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_S, Ip_F_S)
//============================================================================


struct  Ip_F_Uc  {
  int *v1;
  float v2;
  unsigned char v3;
};
//SIG(1 Ip_F_Uc) C1{ Fp Fi Fc}



static void Test_Ip_F_Uc()
{
  {
    init_simple_test("Ip_F_Uc");
    STRUCT_IF_C Ip_F_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Uc)");
    check_field_offset(lv, v1, 0, "Ip_F_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Uc, Ip_F_Uc)
//============================================================================


struct  Ip_F_Ui  {
  int *v1;
  float v2;
  unsigned int v3;
};
//SIG(1 Ip_F_Ui) C1{ Fp Fi[2]}



static void Test_Ip_F_Ui()
{
  {
    init_simple_test("Ip_F_Ui");
    STRUCT_IF_C Ip_F_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Ui)");
    check_field_offset(lv, v1, 0, "Ip_F_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Ui, Ip_F_Ui)
//============================================================================


struct  Ip_F_Ul  {
  int *v1;
  float v2;
  __tsu64 v3;
};
//SIG(1 Ip_F_Ul) C1{ Fp Fi FL}



static void Test_Ip_F_Ul()
{
  {
    init_simple_test("Ip_F_Ul");
    STRUCT_IF_C Ip_F_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Ul)");
    check_field_offset(lv, v1, 0, "Ip_F_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Ul, Ip_F_Ul)
//============================================================================


struct  Ip_F_Us  {
  int *v1;
  float v2;
  unsigned short v3;
};
//SIG(1 Ip_F_Us) C1{ Fp Fi Fs}



static void Test_Ip_F_Us()
{
  {
    init_simple_test("Ip_F_Us");
    STRUCT_IF_C Ip_F_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_F_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Us)");
    check_field_offset(lv, v1, 0, "Ip_F_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Us.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Us, Ip_F_Us)
//============================================================================


struct  Ip_F_Vp  {
  int *v1;
  float v2;
  void *v3;
};
//SIG(1 Ip_F_Vp) C1{ Fp Fi Fp}



static void Test_Ip_F_Vp()
{
  {
    init_simple_test("Ip_F_Vp");
    STRUCT_IF_C Ip_F_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_Vp)");
    check_field_offset(lv, v1, 0, "Ip_F_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_Vp, Ip_F_Vp)
//============================================================================


struct  Ip_I  {
  int *v1;
  int v2;
};
//SIG(1 Ip_I) C1{ Fp Fi}



static void Test_Ip_I()
{
  {
    init_simple_test("Ip_I");
    STRUCT_IF_C Ip_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I)");
    check_field_offset(lv, v1, 0, "Ip_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I, Ip_I)
//============================================================================


struct  Ip_I_BFu15i  {
  int *v1;
  int v2;
  unsigned int v3:15;
};
//SIG(1 Ip_I_BFu15i) C1{ Fp Fi Fi:15}



static void Test_Ip_I_BFu15i()
{
  {
    init_simple_test("Ip_I_BFu15i");
    static STRUCT_IF_C Ip_I_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_I_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu15i, Ip_I_BFu15i)
//============================================================================


struct  Ip_I_BFu15ll  {
  int *v1;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_I_BFu15ll) C1{ Fp Fi FL:15}



static void Test_Ip_I_BFu15ll()
{
  {
    init_simple_test("Ip_I_BFu15ll");
    static STRUCT_IF_C Ip_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_I_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu15ll, Ip_I_BFu15ll)
//============================================================================


struct  Ip_I_BFu15s  {
  int *v1;
  int v2;
  unsigned short v3:15;
};
//SIG(1 Ip_I_BFu15s) C1{ Fp Fi Fs:15}



static void Test_Ip_I_BFu15s()
{
  {
    init_simple_test("Ip_I_BFu15s");
    static STRUCT_IF_C Ip_I_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_I_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu15s, Ip_I_BFu15s)
//============================================================================


struct  Ip_I_BFu16i  {
  int *v1;
  int v2;
  unsigned int v3:16;
};
//SIG(1 Ip_I_BFu16i) C1{ Fp Fi Fi:16}



static void Test_Ip_I_BFu16i()
{
  {
    init_simple_test("Ip_I_BFu16i");
    static STRUCT_IF_C Ip_I_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_I_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu16i, Ip_I_BFu16i)
//============================================================================


struct  Ip_I_BFu16ll  {
  int *v1;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_I_BFu16ll) C1{ Fp Fi FL:16}



static void Test_Ip_I_BFu16ll()
{
  {
    init_simple_test("Ip_I_BFu16ll");
    static STRUCT_IF_C Ip_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_I_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu16ll, Ip_I_BFu16ll)
//============================================================================


struct  Ip_I_BFu16s  {
  int *v1;
  int v2;
  unsigned short v3:16;
};
//SIG(1 Ip_I_BFu16s) C1{ Fp Fi Fs:16}



static void Test_Ip_I_BFu16s()
{
  {
    init_simple_test("Ip_I_BFu16s");
    static STRUCT_IF_C Ip_I_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_I_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu16s, Ip_I_BFu16s)
//============================================================================


struct  Ip_I_BFu17i  {
  int *v1;
  int v2;
  unsigned int v3:17;
};
//SIG(1 Ip_I_BFu17i) C1{ Fp Fi Fi:17}



static void Test_Ip_I_BFu17i()
{
  {
    init_simple_test("Ip_I_BFu17i");
    static STRUCT_IF_C Ip_I_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_I_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu17i, Ip_I_BFu17i)
//============================================================================


struct  Ip_I_BFu17ll  {
  int *v1;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_I_BFu17ll) C1{ Fp Fi FL:17}



static void Test_Ip_I_BFu17ll()
{
  {
    init_simple_test("Ip_I_BFu17ll");
    static STRUCT_IF_C Ip_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_I_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu17ll, Ip_I_BFu17ll)
//============================================================================


struct  Ip_I_BFu1c  {
  int *v1;
  int v2;
  unsigned char v3:1;
};
//SIG(1 Ip_I_BFu1c) C1{ Fp Fi Fc:1}



static void Test_Ip_I_BFu1c()
{
  {
    init_simple_test("Ip_I_BFu1c");
    static STRUCT_IF_C Ip_I_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu1c, Ip_I_BFu1c)
//============================================================================


struct  Ip_I_BFu1i  {
  int *v1;
  int v2;
  unsigned int v3:1;
};
//SIG(1 Ip_I_BFu1i) C1{ Fp Fi Fi:1}



static void Test_Ip_I_BFu1i()
{
  {
    init_simple_test("Ip_I_BFu1i");
    static STRUCT_IF_C Ip_I_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu1i, Ip_I_BFu1i)
//============================================================================


struct  Ip_I_BFu1ll  {
  int *v1;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_I_BFu1ll) C1{ Fp Fi FL:1}



static void Test_Ip_I_BFu1ll()
{
  {
    init_simple_test("Ip_I_BFu1ll");
    static STRUCT_IF_C Ip_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu1ll, Ip_I_BFu1ll)
//============================================================================


struct  Ip_I_BFu1s  {
  int *v1;
  int v2;
  unsigned short v3:1;
};
//SIG(1 Ip_I_BFu1s) C1{ Fp Fi Fs:1}



static void Test_Ip_I_BFu1s()
{
  {
    init_simple_test("Ip_I_BFu1s");
    static STRUCT_IF_C Ip_I_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu1s, Ip_I_BFu1s)
//============================================================================


struct  Ip_I_BFu31i  {
  int *v1;
  int v2;
  unsigned int v3:31;
};
//SIG(1 Ip_I_BFu31i) C1{ Fp Fi Fi:31}



static void Test_Ip_I_BFu31i()
{
  {
    init_simple_test("Ip_I_BFu31i");
    static STRUCT_IF_C Ip_I_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_I_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu31i, Ip_I_BFu31i)
//============================================================================


struct  Ip_I_BFu31ll  {
  int *v1;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_I_BFu31ll) C1{ Fp Fi FL:31}



static void Test_Ip_I_BFu31ll()
{
  {
    init_simple_test("Ip_I_BFu31ll");
    static STRUCT_IF_C Ip_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_I_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu31ll, Ip_I_BFu31ll)
//============================================================================


struct  Ip_I_BFu32i  {
  int *v1;
  int v2;
  unsigned int v3:32;
};
//SIG(1 Ip_I_BFu32i) C1{ Fp Fi Fi:32}



static void Test_Ip_I_BFu32i()
{
  {
    init_simple_test("Ip_I_BFu32i");
    static STRUCT_IF_C Ip_I_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_I_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu32i, Ip_I_BFu32i)
//============================================================================


struct  Ip_I_BFu32ll  {
  int *v1;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_I_BFu32ll) C1{ Fp Fi FL:32}



static void Test_Ip_I_BFu32ll()
{
  {
    init_simple_test("Ip_I_BFu32ll");
    static STRUCT_IF_C Ip_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_I_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu32ll, Ip_I_BFu32ll)
//============================================================================


struct  Ip_I_BFu33  {
  int *v1;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_I_BFu33) C1{ Fp Fi FL:33}



static void Test_Ip_I_BFu33()
{
  {
    init_simple_test("Ip_I_BFu33");
    static STRUCT_IF_C Ip_I_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_I_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu33, Ip_I_BFu33)
//============================================================================


struct  Ip_I_BFu7c  {
  int *v1;
  int v2;
  unsigned char v3:7;
};
//SIG(1 Ip_I_BFu7c) C1{ Fp Fi Fc:7}



static void Test_Ip_I_BFu7c()
{
  {
    init_simple_test("Ip_I_BFu7c");
    static STRUCT_IF_C Ip_I_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_I_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu7c, Ip_I_BFu7c)
//============================================================================


struct  Ip_I_BFu7i  {
  int *v1;
  int v2;
  unsigned int v3:7;
};
//SIG(1 Ip_I_BFu7i) C1{ Fp Fi Fi:7}



static void Test_Ip_I_BFu7i()
{
  {
    init_simple_test("Ip_I_BFu7i");
    static STRUCT_IF_C Ip_I_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_I_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu7i, Ip_I_BFu7i)
//============================================================================


struct  Ip_I_BFu7ll  {
  int *v1;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_I_BFu7ll) C1{ Fp Fi FL:7}



static void Test_Ip_I_BFu7ll()
{
  {
    init_simple_test("Ip_I_BFu7ll");
    static STRUCT_IF_C Ip_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_I_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu7ll, Ip_I_BFu7ll)
//============================================================================


struct  Ip_I_BFu7s  {
  int *v1;
  int v2;
  unsigned short v3:7;
};
//SIG(1 Ip_I_BFu7s) C1{ Fp Fi Fs:7}



static void Test_Ip_I_BFu7s()
{
  {
    init_simple_test("Ip_I_BFu7s");
    static STRUCT_IF_C Ip_I_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_I_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu7s, Ip_I_BFu7s)
//============================================================================


struct  Ip_I_BFu8c  {
  int *v1;
  int v2;
  unsigned char v3:8;
};
//SIG(1 Ip_I_BFu8c) C1{ Fp Fi Fc:8}



static void Test_Ip_I_BFu8c()
{
  {
    init_simple_test("Ip_I_BFu8c");
    static STRUCT_IF_C Ip_I_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_I_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu8c, Ip_I_BFu8c)
//============================================================================


struct  Ip_I_BFu8i  {
  int *v1;
  int v2;
  unsigned int v3:8;
};
//SIG(1 Ip_I_BFu8i) C1{ Fp Fi Fi:8}



static void Test_Ip_I_BFu8i()
{
  {
    init_simple_test("Ip_I_BFu8i");
    static STRUCT_IF_C Ip_I_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_I_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu8i, Ip_I_BFu8i)
//============================================================================


struct  Ip_I_BFu8ll  {
  int *v1;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_I_BFu8ll) C1{ Fp Fi FL:8}



static void Test_Ip_I_BFu8ll()
{
  {
    init_simple_test("Ip_I_BFu8ll");
    static STRUCT_IF_C Ip_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_I_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu8ll, Ip_I_BFu8ll)
//============================================================================


struct  Ip_I_BFu8s  {
  int *v1;
  int v2;
  unsigned short v3:8;
};
//SIG(1 Ip_I_BFu8s) C1{ Fp Fi Fs:8}



static void Test_Ip_I_BFu8s()
{
  {
    init_simple_test("Ip_I_BFu8s");
    static STRUCT_IF_C Ip_I_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_I_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu8s, Ip_I_BFu8s)
//============================================================================


struct  Ip_I_BFu9i  {
  int *v1;
  int v2;
  unsigned int v3:9;
};
//SIG(1 Ip_I_BFu9i) C1{ Fp Fi Fi:9}



static void Test_Ip_I_BFu9i()
{
  {
    init_simple_test("Ip_I_BFu9i");
    static STRUCT_IF_C Ip_I_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_I_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu9i, Ip_I_BFu9i)
//============================================================================


struct  Ip_I_BFu9ll  {
  int *v1;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_I_BFu9ll) C1{ Fp Fi FL:9}



static void Test_Ip_I_BFu9ll()
{
  {
    init_simple_test("Ip_I_BFu9ll");
    static STRUCT_IF_C Ip_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_I_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu9ll, Ip_I_BFu9ll)
//============================================================================


struct  Ip_I_BFu9s  {
  int *v1;
  int v2;
  unsigned short v3:9;
};
//SIG(1 Ip_I_BFu9s) C1{ Fp Fi Fs:9}



static void Test_Ip_I_BFu9s()
{
  {
    init_simple_test("Ip_I_BFu9s");
    static STRUCT_IF_C Ip_I_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_I_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu9s, Ip_I_BFu9s)
//============================================================================


struct  Ip_I_C  {
  int *v1;
  int v2;
  char v3;
};
//SIG(1 Ip_I_C) C1{ Fp Fi Fc}



static void Test_Ip_I_C()
{
  {
    init_simple_test("Ip_I_C");
    STRUCT_IF_C Ip_I_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_C)");
    check_field_offset(lv, v1, 0, "Ip_I_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_C.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_C, Ip_I_C)
//============================================================================


struct  Ip_I_D  {
  int *v1;
  int v2;
  double v3;
};
//SIG(1 Ip_I_D) C1{ Fp Fi FL}



static void Test_Ip_I_D()
{
  {
    init_simple_test("Ip_I_D");
    STRUCT_IF_C Ip_I_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_D)");
    check_field_offset(lv, v1, 0, "Ip_I_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_D, Ip_I_D)
//============================================================================


struct  Ip_I_F  {
  int *v1;
  int v2;
  float v3;
};
//SIG(1 Ip_I_F) C1{ Fp Fi[2]}



static void Test_Ip_I_F()
{
  {
    init_simple_test("Ip_I_F");
    STRUCT_IF_C Ip_I_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_F)");
    check_field_offset(lv, v1, 0, "Ip_I_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_F, Ip_I_F)
//============================================================================


struct  Ip_I_I  {
  int *v1;
  int v2;
  int v3;
};
//SIG(1 Ip_I_I) C1{ Fp Fi[2]}



static void Test_Ip_I_I()
{
  {
    init_simple_test("Ip_I_I");
    STRUCT_IF_C Ip_I_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_I)");
    check_field_offset(lv, v1, 0, "Ip_I_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_I, Ip_I_I)
//============================================================================


struct  Ip_I_Ip  {
  int *v1;
  int v2;
  int *v3;
};
//SIG(1 Ip_I_Ip) C1{ Fp Fi Fp}



static void Test_Ip_I_Ip()
{
  {
    init_simple_test("Ip_I_Ip");
    STRUCT_IF_C Ip_I_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Ip)");
    check_field_offset(lv, v1, 0, "Ip_I_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Ip, Ip_I_Ip)
//============================================================================


struct  Ip_I_L  {
  int *v1;
  int v2;
  __tsi64 v3;
};
//SIG(1 Ip_I_L) C1{ Fp Fi FL}



static void Test_Ip_I_L()
{
  {
    init_simple_test("Ip_I_L");
    STRUCT_IF_C Ip_I_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_L)");
    check_field_offset(lv, v1, 0, "Ip_I_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_L, Ip_I_L)
//============================================================================


struct  Ip_I_S  {
  int *v1;
  int v2;
  short v3;
};
//SIG(1 Ip_I_S) C1{ Fp Fi Fs}



static void Test_Ip_I_S()
{
  {
    init_simple_test("Ip_I_S");
    STRUCT_IF_C Ip_I_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_S)");
    check_field_offset(lv, v1, 0, "Ip_I_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_S.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_S, Ip_I_S)
//============================================================================


struct  Ip_I_Uc  {
  int *v1;
  int v2;
  unsigned char v3;
};
//SIG(1 Ip_I_Uc) C1{ Fp Fi Fc}



static void Test_Ip_I_Uc()
{
  {
    init_simple_test("Ip_I_Uc");
    STRUCT_IF_C Ip_I_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Uc)");
    check_field_offset(lv, v1, 0, "Ip_I_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Uc, Ip_I_Uc)
//============================================================================


struct  Ip_I_Ui  {
  int *v1;
  int v2;
  unsigned int v3;
};
//SIG(1 Ip_I_Ui) C1{ Fp Fi[2]}



static void Test_Ip_I_Ui()
{
  {
    init_simple_test("Ip_I_Ui");
    STRUCT_IF_C Ip_I_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Ui)");
    check_field_offset(lv, v1, 0, "Ip_I_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Ui, Ip_I_Ui)
//============================================================================


struct  Ip_I_Ul  {
  int *v1;
  int v2;
  __tsu64 v3;
};
//SIG(1 Ip_I_Ul) C1{ Fp Fi FL}



static void Test_Ip_I_Ul()
{
  {
    init_simple_test("Ip_I_Ul");
    STRUCT_IF_C Ip_I_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Ul)");
    check_field_offset(lv, v1, 0, "Ip_I_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Ul, Ip_I_Ul)
//============================================================================


struct  Ip_I_Us  {
  int *v1;
  int v2;
  unsigned short v3;
};
//SIG(1 Ip_I_Us) C1{ Fp Fi Fs}



static void Test_Ip_I_Us()
{
  {
    init_simple_test("Ip_I_Us");
    STRUCT_IF_C Ip_I_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_I_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Us)");
    check_field_offset(lv, v1, 0, "Ip_I_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Us.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Us, Ip_I_Us)
//============================================================================


struct  Ip_I_Vp  {
  int *v1;
  int v2;
  void *v3;
};
//SIG(1 Ip_I_Vp) C1{ Fp Fi Fp}



static void Test_Ip_I_Vp()
{
  {
    init_simple_test("Ip_I_Vp");
    STRUCT_IF_C Ip_I_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_Vp)");
    check_field_offset(lv, v1, 0, "Ip_I_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_Vp, Ip_I_Vp)
//============================================================================


struct  Ip_Ip  {
  int *v1;
  int *v2;
};
//SIG(1 Ip_Ip) C1{ Fp[2]}



static void Test_Ip_Ip()
{
  {
    init_simple_test("Ip_Ip");
    STRUCT_IF_C Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip, Ip_Ip)
//============================================================================


struct  Ip_Ip_BFu15i  {
  int *v1;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Ip_BFu15i) C1{ Fp[2] Fi:15}



static void Test_Ip_Ip_BFu15i()
{
  {
    init_simple_test("Ip_Ip_BFu15i");
    static STRUCT_IF_C Ip_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu15i, Ip_Ip_BFu15i)
//============================================================================


struct  Ip_Ip_BFu15ll  {
  int *v1;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Ip_BFu15ll) C1{ Fp[2] FL:15}



static void Test_Ip_Ip_BFu15ll()
{
  {
    init_simple_test("Ip_Ip_BFu15ll");
    static STRUCT_IF_C Ip_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu15ll, Ip_Ip_BFu15ll)
//============================================================================


struct  Ip_Ip_BFu15s  {
  int *v1;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Ip_BFu15s) C1{ Fp[2] Fs:15}



static void Test_Ip_Ip_BFu15s()
{
  {
    init_simple_test("Ip_Ip_BFu15s");
    static STRUCT_IF_C Ip_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu15s, Ip_Ip_BFu15s)
//============================================================================


struct  Ip_Ip_BFu16i  {
  int *v1;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Ip_BFu16i) C1{ Fp[2] Fi:16}



static void Test_Ip_Ip_BFu16i()
{
  {
    init_simple_test("Ip_Ip_BFu16i");
    static STRUCT_IF_C Ip_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu16i, Ip_Ip_BFu16i)
//============================================================================


struct  Ip_Ip_BFu16ll  {
  int *v1;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Ip_BFu16ll) C1{ Fp[2] FL:16}



static void Test_Ip_Ip_BFu16ll()
{
  {
    init_simple_test("Ip_Ip_BFu16ll");
    static STRUCT_IF_C Ip_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu16ll, Ip_Ip_BFu16ll)
//============================================================================


struct  Ip_Ip_BFu16s  {
  int *v1;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Ip_BFu16s) C1{ Fp[2] Fs:16}



static void Test_Ip_Ip_BFu16s()
{
  {
    init_simple_test("Ip_Ip_BFu16s");
    static STRUCT_IF_C Ip_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu16s, Ip_Ip_BFu16s)
//============================================================================


struct  Ip_Ip_BFu17i  {
  int *v1;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Ip_BFu17i) C1{ Fp[2] Fi:17}



static void Test_Ip_Ip_BFu17i()
{
  {
    init_simple_test("Ip_Ip_BFu17i");
    static STRUCT_IF_C Ip_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Ip_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Ip_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu17i, Ip_Ip_BFu17i)
//============================================================================


struct  Ip_Ip_BFu17ll  {
  int *v1;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Ip_BFu17ll) C1{ Fp[2] FL:17}



static void Test_Ip_Ip_BFu17ll()
{
  {
    init_simple_test("Ip_Ip_BFu17ll");
    static STRUCT_IF_C Ip_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Ip_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Ip_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu17ll, Ip_Ip_BFu17ll)
//============================================================================


struct  Ip_Ip_BFu1c  {
  int *v1;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Ip_BFu1c) C1{ Fp[2] Fc:1}



static void Test_Ip_Ip_BFu1c()
{
  {
    init_simple_test("Ip_Ip_BFu1c");
    static STRUCT_IF_C Ip_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu1c, Ip_Ip_BFu1c)
//============================================================================


struct  Ip_Ip_BFu1i  {
  int *v1;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Ip_BFu1i) C1{ Fp[2] Fi:1}



static void Test_Ip_Ip_BFu1i()
{
  {
    init_simple_test("Ip_Ip_BFu1i");
    static STRUCT_IF_C Ip_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu1i, Ip_Ip_BFu1i)
//============================================================================


struct  Ip_Ip_BFu1ll  {
  int *v1;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Ip_BFu1ll) C1{ Fp[2] FL:1}



static void Test_Ip_Ip_BFu1ll()
{
  {
    init_simple_test("Ip_Ip_BFu1ll");
    static STRUCT_IF_C Ip_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu1ll, Ip_Ip_BFu1ll)
//============================================================================


struct  Ip_Ip_BFu1s  {
  int *v1;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Ip_BFu1s) C1{ Fp[2] Fs:1}



static void Test_Ip_Ip_BFu1s()
{
  {
    init_simple_test("Ip_Ip_BFu1s");
    static STRUCT_IF_C Ip_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu1s, Ip_Ip_BFu1s)
//============================================================================


struct  Ip_Ip_BFu31i  {
  int *v1;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Ip_BFu31i) C1{ Fp[2] Fi:31}



static void Test_Ip_Ip_BFu31i()
{
  {
    init_simple_test("Ip_Ip_BFu31i");
    static STRUCT_IF_C Ip_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Ip_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Ip_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu31i, Ip_Ip_BFu31i)
//============================================================================


struct  Ip_Ip_BFu31ll  {
  int *v1;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Ip_BFu31ll) C1{ Fp[2] FL:31}



static void Test_Ip_Ip_BFu31ll()
{
  {
    init_simple_test("Ip_Ip_BFu31ll");
    static STRUCT_IF_C Ip_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Ip_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Ip_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu31ll, Ip_Ip_BFu31ll)
//============================================================================


struct  Ip_Ip_BFu32i  {
  int *v1;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Ip_BFu32i) C1{ Fp[2] Fi:32}



static void Test_Ip_Ip_BFu32i()
{
  {
    init_simple_test("Ip_Ip_BFu32i");
    static STRUCT_IF_C Ip_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Ip_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Ip_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu32i, Ip_Ip_BFu32i)
//============================================================================


struct  Ip_Ip_BFu32ll  {
  int *v1;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Ip_BFu32ll) C1{ Fp[2] FL:32}



static void Test_Ip_Ip_BFu32ll()
{
  {
    init_simple_test("Ip_Ip_BFu32ll");
    static STRUCT_IF_C Ip_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Ip_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Ip_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu32ll, Ip_Ip_BFu32ll)
//============================================================================


struct  Ip_Ip_BFu33  {
  int *v1;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Ip_BFu33) C1{ Fp[2] FL:33}



static void Test_Ip_Ip_BFu33()
{
  {
    init_simple_test("Ip_Ip_BFu33");
    static STRUCT_IF_C Ip_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu33, Ip_Ip_BFu33)
//============================================================================


struct  Ip_Ip_BFu7c  {
  int *v1;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Ip_BFu7c) C1{ Fp[2] Fc:7}



static void Test_Ip_Ip_BFu7c()
{
  {
    init_simple_test("Ip_Ip_BFu7c");
    static STRUCT_IF_C Ip_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu7c, Ip_Ip_BFu7c)
//============================================================================


struct  Ip_Ip_BFu7i  {
  int *v1;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Ip_BFu7i) C1{ Fp[2] Fi:7}



static void Test_Ip_Ip_BFu7i()
{
  {
    init_simple_test("Ip_Ip_BFu7i");
    static STRUCT_IF_C Ip_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu7i, Ip_Ip_BFu7i)
//============================================================================


struct  Ip_Ip_BFu7ll  {
  int *v1;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Ip_BFu7ll) C1{ Fp[2] FL:7}



static void Test_Ip_Ip_BFu7ll()
{
  {
    init_simple_test("Ip_Ip_BFu7ll");
    static STRUCT_IF_C Ip_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu7ll, Ip_Ip_BFu7ll)
//============================================================================


struct  Ip_Ip_BFu7s  {
  int *v1;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Ip_BFu7s) C1{ Fp[2] Fs:7}



static void Test_Ip_Ip_BFu7s()
{
  {
    init_simple_test("Ip_Ip_BFu7s");
    static STRUCT_IF_C Ip_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu7s, Ip_Ip_BFu7s)
//============================================================================


struct  Ip_Ip_BFu8c  {
  int *v1;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Ip_BFu8c) C1{ Fp[2] Fc:8}



static void Test_Ip_Ip_BFu8c()
{
  {
    init_simple_test("Ip_Ip_BFu8c");
    static STRUCT_IF_C Ip_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu8c, Ip_Ip_BFu8c)
//============================================================================


struct  Ip_Ip_BFu8i  {
  int *v1;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Ip_BFu8i) C1{ Fp[2] Fi:8}



static void Test_Ip_Ip_BFu8i()
{
  {
    init_simple_test("Ip_Ip_BFu8i");
    static STRUCT_IF_C Ip_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu8i, Ip_Ip_BFu8i)
//============================================================================


struct  Ip_Ip_BFu8ll  {
  int *v1;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Ip_BFu8ll) C1{ Fp[2] FL:8}



static void Test_Ip_Ip_BFu8ll()
{
  {
    init_simple_test("Ip_Ip_BFu8ll");
    static STRUCT_IF_C Ip_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu8ll, Ip_Ip_BFu8ll)
//============================================================================


struct  Ip_Ip_BFu8s  {
  int *v1;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Ip_BFu8s) C1{ Fp[2] Fs:8}



static void Test_Ip_Ip_BFu8s()
{
  {
    init_simple_test("Ip_Ip_BFu8s");
    static STRUCT_IF_C Ip_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu8s, Ip_Ip_BFu8s)
//============================================================================


struct  Ip_Ip_BFu9i  {
  int *v1;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Ip_BFu9i) C1{ Fp[2] Fi:9}



static void Test_Ip_Ip_BFu9i()
{
  {
    init_simple_test("Ip_Ip_BFu9i");
    static STRUCT_IF_C Ip_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu9i, Ip_Ip_BFu9i)
//============================================================================


struct  Ip_Ip_BFu9ll  {
  int *v1;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Ip_BFu9ll) C1{ Fp[2] FL:9}



static void Test_Ip_Ip_BFu9ll()
{
  {
    init_simple_test("Ip_Ip_BFu9ll");
    static STRUCT_IF_C Ip_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu9ll, Ip_Ip_BFu9ll)
//============================================================================


struct  Ip_Ip_BFu9s  {
  int *v1;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Ip_BFu9s) C1{ Fp[2] Fs:9}



static void Test_Ip_Ip_BFu9s()
{
  {
    init_simple_test("Ip_Ip_BFu9s");
    static STRUCT_IF_C Ip_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu9s, Ip_Ip_BFu9s)
//============================================================================


struct  Ip_Ip_C  {
  int *v1;
  int *v2;
  char v3;
};
//SIG(1 Ip_Ip_C) C1{ Fp[2] Fc}



static void Test_Ip_Ip_C()
{
  {
    init_simple_test("Ip_Ip_C");
    STRUCT_IF_C Ip_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_C)");
    check_field_offset(lv, v1, 0, "Ip_Ip_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_C, Ip_Ip_C)
//============================================================================


struct  Ip_Ip_D  {
  int *v1;
  int *v2;
  double v3;
};
//SIG(1 Ip_Ip_D) C1{ Fp[2] FL}



static void Test_Ip_Ip_D()
{
  {
    init_simple_test("Ip_Ip_D");
    STRUCT_IF_C Ip_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_D)");
    check_field_offset(lv, v1, 0, "Ip_Ip_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_D, Ip_Ip_D)
//============================================================================


struct  Ip_Ip_F  {
  int *v1;
  int *v2;
  float v3;
};
//SIG(1 Ip_Ip_F) C1{ Fp[2] Fi}



static void Test_Ip_Ip_F()
{
  {
    init_simple_test("Ip_Ip_F");
    STRUCT_IF_C Ip_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_F)");
    check_field_offset(lv, v1, 0, "Ip_Ip_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_F, Ip_Ip_F)
//============================================================================


struct  Ip_Ip_I  {
  int *v1;
  int *v2;
  int v3;
};
//SIG(1 Ip_Ip_I) C1{ Fp[2] Fi}



static void Test_Ip_Ip_I()
{
  {
    init_simple_test("Ip_Ip_I");
    STRUCT_IF_C Ip_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_I)");
    check_field_offset(lv, v1, 0, "Ip_Ip_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_I, Ip_Ip_I)
//============================================================================


struct  Ip_Ip_Ip  {
  int *v1;
  int *v2;
  int *v3;
};
//SIG(1 Ip_Ip_Ip) C1{ Fp[3]}



static void Test_Ip_Ip_Ip()
{
  {
    init_simple_test("Ip_Ip_Ip");
    STRUCT_IF_C Ip_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Ip, Ip_Ip_Ip)
//============================================================================


struct  Ip_Ip_L  {
  int *v1;
  int *v2;
  __tsi64 v3;
};
//SIG(1 Ip_Ip_L) C1{ Fp[2] FL}



static void Test_Ip_Ip_L()
{
  {
    init_simple_test("Ip_Ip_L");
    STRUCT_IF_C Ip_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_L)");
    check_field_offset(lv, v1, 0, "Ip_Ip_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_L, Ip_Ip_L)
//============================================================================


struct  Ip_Ip_S  {
  int *v1;
  int *v2;
  short v3;
};
//SIG(1 Ip_Ip_S) C1{ Fp[2] Fs}



static void Test_Ip_Ip_S()
{
  {
    init_simple_test("Ip_Ip_S");
    STRUCT_IF_C Ip_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_S)");
    check_field_offset(lv, v1, 0, "Ip_Ip_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_S, Ip_Ip_S)
//============================================================================


struct  Ip_Ip_Uc  {
  int *v1;
  int *v2;
  unsigned char v3;
};
//SIG(1 Ip_Ip_Uc) C1{ Fp[2] Fc}



static void Test_Ip_Ip_Uc()
{
  {
    init_simple_test("Ip_Ip_Uc");
    STRUCT_IF_C Ip_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Uc, Ip_Ip_Uc)
//============================================================================


struct  Ip_Ip_Ui  {
  int *v1;
  int *v2;
  unsigned int v3;
};
//SIG(1 Ip_Ip_Ui) C1{ Fp[2] Fi}



static void Test_Ip_Ip_Ui()
{
  {
    init_simple_test("Ip_Ip_Ui");
    STRUCT_IF_C Ip_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Ui, Ip_Ip_Ui)
//============================================================================


struct  Ip_Ip_Ul  {
  int *v1;
  int *v2;
  __tsu64 v3;
};
//SIG(1 Ip_Ip_Ul) C1{ Fp[2] FL}



static void Test_Ip_Ip_Ul()
{
  {
    init_simple_test("Ip_Ip_Ul");
    STRUCT_IF_C Ip_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Ul, Ip_Ip_Ul)
//============================================================================


struct  Ip_Ip_Us  {
  int *v1;
  int *v2;
  unsigned short v3;
};
//SIG(1 Ip_Ip_Us) C1{ Fp[2] Fs}



static void Test_Ip_Ip_Us()
{
  {
    init_simple_test("Ip_Ip_Us");
    STRUCT_IF_C Ip_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Us)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Us, Ip_Ip_Us)
//============================================================================


struct  Ip_Ip_Vp  {
  int *v1;
  int *v2;
  void *v3;
};
//SIG(1 Ip_Ip_Vp) C1{ Fp[3]}



static void Test_Ip_Ip_Vp()
{
  {
    init_simple_test("Ip_Ip_Vp");
    STRUCT_IF_C Ip_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Ip_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_Vp, Ip_Ip_Vp)
//============================================================================


struct  Ip_L  {
  int *v1;
  __tsi64 v2;
};
//SIG(1 Ip_L) C1{ Fp FL}



static void Test_Ip_L()
{
  {
    init_simple_test("Ip_L");
    STRUCT_IF_C Ip_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L)");
    check_field_offset(lv, v1, 0, "Ip_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L, Ip_L)
//============================================================================


struct  Ip_L_BFu15i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 Ip_L_BFu15i) C1{ Fp FL Fi:15}



static void Test_Ip_L_BFu15i()
{
  {
    init_simple_test("Ip_L_BFu15i");
    static STRUCT_IF_C Ip_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu15i, Ip_L_BFu15i)
//============================================================================


struct  Ip_L_BFu15ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_L_BFu15ll) C1{ Fp FL FL:15}



static void Test_Ip_L_BFu15ll()
{
  {
    init_simple_test("Ip_L_BFu15ll");
    static STRUCT_IF_C Ip_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu15ll, Ip_L_BFu15ll)
//============================================================================


struct  Ip_L_BFu15s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 Ip_L_BFu15s) C1{ Fp FL Fs:15}



static void Test_Ip_L_BFu15s()
{
  {
    init_simple_test("Ip_L_BFu15s");
    static STRUCT_IF_C Ip_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu15s, Ip_L_BFu15s)
//============================================================================


struct  Ip_L_BFu16i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 Ip_L_BFu16i) C1{ Fp FL Fi:16}



static void Test_Ip_L_BFu16i()
{
  {
    init_simple_test("Ip_L_BFu16i");
    static STRUCT_IF_C Ip_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu16i, Ip_L_BFu16i)
//============================================================================


struct  Ip_L_BFu16ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_L_BFu16ll) C1{ Fp FL FL:16}



static void Test_Ip_L_BFu16ll()
{
  {
    init_simple_test("Ip_L_BFu16ll");
    static STRUCT_IF_C Ip_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu16ll, Ip_L_BFu16ll)
//============================================================================


struct  Ip_L_BFu16s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 Ip_L_BFu16s) C1{ Fp FL Fs:16}



static void Test_Ip_L_BFu16s()
{
  {
    init_simple_test("Ip_L_BFu16s");
    static STRUCT_IF_C Ip_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu16s, Ip_L_BFu16s)
//============================================================================


struct  Ip_L_BFu17i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 Ip_L_BFu17i) C1{ Fp FL Fi:17}



static void Test_Ip_L_BFu17i()
{
  {
    init_simple_test("Ip_L_BFu17i");
    static STRUCT_IF_C Ip_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu17i, Ip_L_BFu17i)
//============================================================================


struct  Ip_L_BFu17ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_L_BFu17ll) C1{ Fp FL FL:17}



static void Test_Ip_L_BFu17ll()
{
  {
    init_simple_test("Ip_L_BFu17ll");
    static STRUCT_IF_C Ip_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu17ll, Ip_L_BFu17ll)
//============================================================================


struct  Ip_L_BFu1c  {
  int *v1;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 Ip_L_BFu1c) C1{ Fp FL Fc:1}



static void Test_Ip_L_BFu1c()
{
  {
    init_simple_test("Ip_L_BFu1c");
    static STRUCT_IF_C Ip_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu1c, Ip_L_BFu1c)
//============================================================================


struct  Ip_L_BFu1i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 Ip_L_BFu1i) C1{ Fp FL Fi:1}



static void Test_Ip_L_BFu1i()
{
  {
    init_simple_test("Ip_L_BFu1i");
    static STRUCT_IF_C Ip_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu1i, Ip_L_BFu1i)
//============================================================================


struct  Ip_L_BFu1ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_L_BFu1ll) C1{ Fp FL FL:1}



static void Test_Ip_L_BFu1ll()
{
  {
    init_simple_test("Ip_L_BFu1ll");
    static STRUCT_IF_C Ip_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu1ll, Ip_L_BFu1ll)
//============================================================================


struct  Ip_L_BFu1s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 Ip_L_BFu1s) C1{ Fp FL Fs:1}



static void Test_Ip_L_BFu1s()
{
  {
    init_simple_test("Ip_L_BFu1s");
    static STRUCT_IF_C Ip_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu1s, Ip_L_BFu1s)
//============================================================================


struct  Ip_L_BFu31i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 Ip_L_BFu31i) C1{ Fp FL Fi:31}



static void Test_Ip_L_BFu31i()
{
  {
    init_simple_test("Ip_L_BFu31i");
    static STRUCT_IF_C Ip_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu31i, Ip_L_BFu31i)
//============================================================================


struct  Ip_L_BFu31ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_L_BFu31ll) C1{ Fp FL FL:31}



static void Test_Ip_L_BFu31ll()
{
  {
    init_simple_test("Ip_L_BFu31ll");
    static STRUCT_IF_C Ip_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu31ll, Ip_L_BFu31ll)
//============================================================================


struct  Ip_L_BFu32i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 Ip_L_BFu32i) C1{ Fp FL Fi:32}



static void Test_Ip_L_BFu32i()
{
  {
    init_simple_test("Ip_L_BFu32i");
    static STRUCT_IF_C Ip_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu32i, Ip_L_BFu32i)
//============================================================================


struct  Ip_L_BFu32ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_L_BFu32ll) C1{ Fp FL FL:32}



static void Test_Ip_L_BFu32ll()
{
  {
    init_simple_test("Ip_L_BFu32ll");
    static STRUCT_IF_C Ip_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu32ll, Ip_L_BFu32ll)
//============================================================================


struct  Ip_L_BFu33  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_L_BFu33) C1{ Fp FL FL:33}



static void Test_Ip_L_BFu33()
{
  {
    init_simple_test("Ip_L_BFu33");
    static STRUCT_IF_C Ip_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Ip_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Ip_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu33, Ip_L_BFu33)
//============================================================================


struct  Ip_L_BFu7c  {
  int *v1;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 Ip_L_BFu7c) C1{ Fp FL Fc:7}



static void Test_Ip_L_BFu7c()
{
  {
    init_simple_test("Ip_L_BFu7c");
    static STRUCT_IF_C Ip_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu7c, Ip_L_BFu7c)
//============================================================================


struct  Ip_L_BFu7i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 Ip_L_BFu7i) C1{ Fp FL Fi:7}



static void Test_Ip_L_BFu7i()
{
  {
    init_simple_test("Ip_L_BFu7i");
    static STRUCT_IF_C Ip_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu7i, Ip_L_BFu7i)
//============================================================================


struct  Ip_L_BFu7ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_L_BFu7ll) C1{ Fp FL FL:7}



static void Test_Ip_L_BFu7ll()
{
  {
    init_simple_test("Ip_L_BFu7ll");
    static STRUCT_IF_C Ip_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu7ll, Ip_L_BFu7ll)
//============================================================================


struct  Ip_L_BFu7s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 Ip_L_BFu7s) C1{ Fp FL Fs:7}



static void Test_Ip_L_BFu7s()
{
  {
    init_simple_test("Ip_L_BFu7s");
    static STRUCT_IF_C Ip_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu7s, Ip_L_BFu7s)
//============================================================================


struct  Ip_L_BFu8c  {
  int *v1;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 Ip_L_BFu8c) C1{ Fp FL Fc:8}



static void Test_Ip_L_BFu8c()
{
  {
    init_simple_test("Ip_L_BFu8c");
    static STRUCT_IF_C Ip_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu8c, Ip_L_BFu8c)
//============================================================================


struct  Ip_L_BFu8i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 Ip_L_BFu8i) C1{ Fp FL Fi:8}



static void Test_Ip_L_BFu8i()
{
  {
    init_simple_test("Ip_L_BFu8i");
    static STRUCT_IF_C Ip_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu8i, Ip_L_BFu8i)
//============================================================================


struct  Ip_L_BFu8ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_L_BFu8ll) C1{ Fp FL FL:8}



static void Test_Ip_L_BFu8ll()
{
  {
    init_simple_test("Ip_L_BFu8ll");
    static STRUCT_IF_C Ip_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu8ll, Ip_L_BFu8ll)
//============================================================================


struct  Ip_L_BFu8s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 Ip_L_BFu8s) C1{ Fp FL Fs:8}



static void Test_Ip_L_BFu8s()
{
  {
    init_simple_test("Ip_L_BFu8s");
    static STRUCT_IF_C Ip_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu8s, Ip_L_BFu8s)
//============================================================================


struct  Ip_L_BFu9i  {
  int *v1;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 Ip_L_BFu9i) C1{ Fp FL Fi:9}



static void Test_Ip_L_BFu9i()
{
  {
    init_simple_test("Ip_L_BFu9i");
    static STRUCT_IF_C Ip_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu9i, Ip_L_BFu9i)
//============================================================================


struct  Ip_L_BFu9ll  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_L_BFu9ll) C1{ Fp FL FL:9}



static void Test_Ip_L_BFu9ll()
{
  {
    init_simple_test("Ip_L_BFu9ll");
    static STRUCT_IF_C Ip_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu9ll, Ip_L_BFu9ll)
//============================================================================


struct  Ip_L_BFu9s  {
  int *v1;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 Ip_L_BFu9s) C1{ Fp FL Fs:9}



static void Test_Ip_L_BFu9s()
{
  {
    init_simple_test("Ip_L_BFu9s");
    static STRUCT_IF_C Ip_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu9s, Ip_L_BFu9s)
//============================================================================


struct  Ip_L_C  {
  int *v1;
  __tsi64 v2;
  char v3;
};
//SIG(1 Ip_L_C) C1{ Fp FL Fc}



static void Test_Ip_L_C()
{
  {
    init_simple_test("Ip_L_C");
    STRUCT_IF_C Ip_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_C)");
    check_field_offset(lv, v1, 0, "Ip_L_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_C, Ip_L_C)
//============================================================================


struct  Ip_L_D  {
  int *v1;
  __tsi64 v2;
  double v3;
};
//SIG(1 Ip_L_D) C1{ Fp FL[2]}



static void Test_Ip_L_D()
{
  {
    init_simple_test("Ip_L_D");
    STRUCT_IF_C Ip_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_D)");
    check_field_offset(lv, v1, 0, "Ip_L_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_D, Ip_L_D)
//============================================================================


struct  Ip_L_F  {
  int *v1;
  __tsi64 v2;
  float v3;
};
//SIG(1 Ip_L_F) C1{ Fp FL Fi}



static void Test_Ip_L_F()
{
  {
    init_simple_test("Ip_L_F");
    STRUCT_IF_C Ip_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_F)");
    check_field_offset(lv, v1, 0, "Ip_L_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_F, Ip_L_F)
//============================================================================


struct  Ip_L_I  {
  int *v1;
  __tsi64 v2;
  int v3;
};
//SIG(1 Ip_L_I) C1{ Fp FL Fi}



static void Test_Ip_L_I()
{
  {
    init_simple_test("Ip_L_I");
    STRUCT_IF_C Ip_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_I)");
    check_field_offset(lv, v1, 0, "Ip_L_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_I, Ip_L_I)
//============================================================================


struct  Ip_L_Ip  {
  int *v1;
  __tsi64 v2;
  int *v3;
};
//SIG(1 Ip_L_Ip) C1{ Fp FL Fp}



static void Test_Ip_L_Ip()
{
  {
    init_simple_test("Ip_L_Ip");
    STRUCT_IF_C Ip_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Ip)");
    check_field_offset(lv, v1, 0, "Ip_L_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Ip, Ip_L_Ip)
//============================================================================


struct  Ip_L_L  {
  int *v1;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 Ip_L_L) C1{ Fp FL[2]}



static void Test_Ip_L_L()
{
  {
    init_simple_test("Ip_L_L");
    STRUCT_IF_C Ip_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_L)");
    check_field_offset(lv, v1, 0, "Ip_L_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_L, Ip_L_L)
//============================================================================


struct  Ip_L_S  {
  int *v1;
  __tsi64 v2;
  short v3;
};
//SIG(1 Ip_L_S) C1{ Fp FL Fs}



static void Test_Ip_L_S()
{
  {
    init_simple_test("Ip_L_S");
    STRUCT_IF_C Ip_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_S)");
    check_field_offset(lv, v1, 0, "Ip_L_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_S, Ip_L_S)
//============================================================================


struct  Ip_L_Uc  {
  int *v1;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 Ip_L_Uc) C1{ Fp FL Fc}



static void Test_Ip_L_Uc()
{
  {
    init_simple_test("Ip_L_Uc");
    STRUCT_IF_C Ip_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Uc)");
    check_field_offset(lv, v1, 0, "Ip_L_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Uc, Ip_L_Uc)
//============================================================================


struct  Ip_L_Ui  {
  int *v1;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 Ip_L_Ui) C1{ Fp FL Fi}



static void Test_Ip_L_Ui()
{
  {
    init_simple_test("Ip_L_Ui");
    STRUCT_IF_C Ip_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Ui)");
    check_field_offset(lv, v1, 0, "Ip_L_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Ui, Ip_L_Ui)
//============================================================================


struct  Ip_L_Ul  {
  int *v1;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 Ip_L_Ul) C1{ Fp FL[2]}



static void Test_Ip_L_Ul()
{
  {
    init_simple_test("Ip_L_Ul");
    STRUCT_IF_C Ip_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Ul)");
    check_field_offset(lv, v1, 0, "Ip_L_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Ul, Ip_L_Ul)
//============================================================================


struct  Ip_L_Us  {
  int *v1;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 Ip_L_Us) C1{ Fp FL Fs}



static void Test_Ip_L_Us()
{
  {
    init_simple_test("Ip_L_Us");
    STRUCT_IF_C Ip_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Us)");
    check_field_offset(lv, v1, 0, "Ip_L_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Us, Ip_L_Us)
//============================================================================


struct  Ip_L_Vp  {
  int *v1;
  __tsi64 v2;
  void *v3;
};
//SIG(1 Ip_L_Vp) C1{ Fp FL Fp}



static void Test_Ip_L_Vp()
{
  {
    init_simple_test("Ip_L_Vp");
    STRUCT_IF_C Ip_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_Vp)");
    check_field_offset(lv, v1, 0, "Ip_L_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_Vp, Ip_L_Vp)
//============================================================================


struct  Ip_S  {
  int *v1;
  short v2;
};
//SIG(1 Ip_S) C1{ Fp Fs}



static void Test_Ip_S()
{
  {
    init_simple_test("Ip_S");
    STRUCT_IF_C Ip_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S)");
    check_field_offset(lv, v1, 0, "Ip_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S, Ip_S)
//============================================================================


struct  Ip_S_BFu15i  {
  int *v1;
  short v2;
  unsigned int v3:15;
};
//SIG(1 Ip_S_BFu15i) C1{ Fp Fs Fi:15}



static void Test_Ip_S_BFu15i()
{
  {
    init_simple_test("Ip_S_BFu15i");
    static STRUCT_IF_C Ip_S_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_S_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu15i, Ip_S_BFu15i)
//============================================================================


struct  Ip_S_BFu15ll  {
  int *v1;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_S_BFu15ll) C1{ Fp Fs FL:15}



static void Test_Ip_S_BFu15ll()
{
  {
    init_simple_test("Ip_S_BFu15ll");
    static STRUCT_IF_C Ip_S_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_S_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu15ll, Ip_S_BFu15ll)
//============================================================================


struct  Ip_S_BFu15s  {
  int *v1;
  short v2;
  unsigned short v3:15;
};
//SIG(1 Ip_S_BFu15s) C1{ Fp Fs Fs:15}



static void Test_Ip_S_BFu15s()
{
  {
    init_simple_test("Ip_S_BFu15s");
    static STRUCT_IF_C Ip_S_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_S_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu15s, Ip_S_BFu15s)
//============================================================================


struct  Ip_S_BFu16i  {
  int *v1;
  short v2;
  unsigned int v3:16;
};
//SIG(1 Ip_S_BFu16i) C1{ Fp Fs Fi:16}



static void Test_Ip_S_BFu16i()
{
  {
    init_simple_test("Ip_S_BFu16i");
    static STRUCT_IF_C Ip_S_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_S_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu16i, Ip_S_BFu16i)
//============================================================================


struct  Ip_S_BFu16ll  {
  int *v1;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_S_BFu16ll) C1{ Fp Fs FL:16}



static void Test_Ip_S_BFu16ll()
{
  {
    init_simple_test("Ip_S_BFu16ll");
    static STRUCT_IF_C Ip_S_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_S_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu16ll, Ip_S_BFu16ll)
//============================================================================


struct  Ip_S_BFu16s  {
  int *v1;
  short v2;
  unsigned short v3:16;
};
//SIG(1 Ip_S_BFu16s) C1{ Fp Fs Fs:16}



static void Test_Ip_S_BFu16s()
{
  {
    init_simple_test("Ip_S_BFu16s");
    static STRUCT_IF_C Ip_S_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_S_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu16s, Ip_S_BFu16s)
//============================================================================


struct  Ip_S_BFu17i  {
  int *v1;
  short v2;
  unsigned int v3:17;
};
//SIG(1 Ip_S_BFu17i) C1{ Fp Fs Fi:17}



static void Test_Ip_S_BFu17i()
{
  {
    init_simple_test("Ip_S_BFu17i");
    static STRUCT_IF_C Ip_S_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_S_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu17i, Ip_S_BFu17i)
//============================================================================


struct  Ip_S_BFu17ll  {
  int *v1;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_S_BFu17ll) C1{ Fp Fs FL:17}



static void Test_Ip_S_BFu17ll()
{
  {
    init_simple_test("Ip_S_BFu17ll");
    static STRUCT_IF_C Ip_S_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 17, 1, "Ip_S_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 17, hide_ull(1LL<<16), "Ip_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu17ll, Ip_S_BFu17ll)
//============================================================================


struct  Ip_S_BFu1c  {
  int *v1;
  short v2;
  unsigned char v3:1;
};
//SIG(1 Ip_S_BFu1c) C1{ Fp Fs Fc:1}



static void Test_Ip_S_BFu1c()
{
  {
    init_simple_test("Ip_S_BFu1c");
    static STRUCT_IF_C Ip_S_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu1c, Ip_S_BFu1c)
//============================================================================


struct  Ip_S_BFu1i  {
  int *v1;
  short v2;
  unsigned int v3:1;
};
//SIG(1 Ip_S_BFu1i) C1{ Fp Fs Fi:1}



static void Test_Ip_S_BFu1i()
{
  {
    init_simple_test("Ip_S_BFu1i");
    static STRUCT_IF_C Ip_S_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu1i, Ip_S_BFu1i)
//============================================================================


struct  Ip_S_BFu1ll  {
  int *v1;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_S_BFu1ll) C1{ Fp Fs FL:1}



static void Test_Ip_S_BFu1ll()
{
  {
    init_simple_test("Ip_S_BFu1ll");
    static STRUCT_IF_C Ip_S_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu1ll, Ip_S_BFu1ll)
//============================================================================


struct  Ip_S_BFu1s  {
  int *v1;
  short v2;
  unsigned short v3:1;
};
//SIG(1 Ip_S_BFu1s) C1{ Fp Fs Fs:1}



static void Test_Ip_S_BFu1s()
{
  {
    init_simple_test("Ip_S_BFu1s");
    static STRUCT_IF_C Ip_S_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu1s, Ip_S_BFu1s)
//============================================================================


struct  Ip_S_BFu31i  {
  int *v1;
  short v2;
  unsigned int v3:31;
};
//SIG(1 Ip_S_BFu31i) C1{ Fp Fs Fi:31}



static void Test_Ip_S_BFu31i()
{
  {
    init_simple_test("Ip_S_BFu31i");
    static STRUCT_IF_C Ip_S_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_S_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu31i, Ip_S_BFu31i)
//============================================================================


struct  Ip_S_BFu31ll  {
  int *v1;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_S_BFu31ll) C1{ Fp Fs FL:31}



static void Test_Ip_S_BFu31ll()
{
  {
    init_simple_test("Ip_S_BFu31ll");
    static STRUCT_IF_C Ip_S_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 31, 1, "Ip_S_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 31, hide_ull(1LL<<30), "Ip_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu31ll, Ip_S_BFu31ll)
//============================================================================


struct  Ip_S_BFu32i  {
  int *v1;
  short v2;
  unsigned int v3:32;
};
//SIG(1 Ip_S_BFu32i) C1{ Fp Fs Fi:32}



static void Test_Ip_S_BFu32i()
{
  {
    init_simple_test("Ip_S_BFu32i");
    static STRUCT_IF_C Ip_S_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_S_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu32i, Ip_S_BFu32i)
//============================================================================


struct  Ip_S_BFu32ll  {
  int *v1;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_S_BFu32ll) C1{ Fp Fs FL:32}



static void Test_Ip_S_BFu32ll()
{
  {
    init_simple_test("Ip_S_BFu32ll");
    static STRUCT_IF_C Ip_S_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 32, 1, "Ip_S_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 32, hide_ull(1LL<<31), "Ip_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu32ll, Ip_S_BFu32ll)
//============================================================================


struct  Ip_S_BFu33  {
  int *v1;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_S_BFu33) C1{ Fp Fs FL:33}



static void Test_Ip_S_BFu33()
{
  {
    init_simple_test("Ip_S_BFu33");
    static STRUCT_IF_C Ip_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 33, 1, "Ip_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 33, hide_ull(1LL<<32), "Ip_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu33, Ip_S_BFu33)
//============================================================================


struct  Ip_S_BFu7c  {
  int *v1;
  short v2;
  unsigned char v3:7;
};
//SIG(1 Ip_S_BFu7c) C1{ Fp Fs Fc:7}



static void Test_Ip_S_BFu7c()
{
  {
    init_simple_test("Ip_S_BFu7c");
    static STRUCT_IF_C Ip_S_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_S_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu7c, Ip_S_BFu7c)
//============================================================================


struct  Ip_S_BFu7i  {
  int *v1;
  short v2;
  unsigned int v3:7;
};
//SIG(1 Ip_S_BFu7i) C1{ Fp Fs Fi:7}



static void Test_Ip_S_BFu7i()
{
  {
    init_simple_test("Ip_S_BFu7i");
    static STRUCT_IF_C Ip_S_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_S_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu7i, Ip_S_BFu7i)
//============================================================================


struct  Ip_S_BFu7ll  {
  int *v1;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_S_BFu7ll) C1{ Fp Fs FL:7}



static void Test_Ip_S_BFu7ll()
{
  {
    init_simple_test("Ip_S_BFu7ll");
    static STRUCT_IF_C Ip_S_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_S_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu7ll, Ip_S_BFu7ll)
//============================================================================


struct  Ip_S_BFu7s  {
  int *v1;
  short v2;
  unsigned short v3:7;
};
//SIG(1 Ip_S_BFu7s) C1{ Fp Fs Fs:7}



static void Test_Ip_S_BFu7s()
{
  {
    init_simple_test("Ip_S_BFu7s");
    static STRUCT_IF_C Ip_S_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_S_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu7s, Ip_S_BFu7s)
//============================================================================


struct  Ip_S_BFu8c  {
  int *v1;
  short v2;
  unsigned char v3:8;
};
//SIG(1 Ip_S_BFu8c) C1{ Fp Fs Fc:8}



static void Test_Ip_S_BFu8c()
{
  {
    init_simple_test("Ip_S_BFu8c");
    static STRUCT_IF_C Ip_S_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_S_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu8c, Ip_S_BFu8c)
//============================================================================


struct  Ip_S_BFu8i  {
  int *v1;
  short v2;
  unsigned int v3:8;
};
//SIG(1 Ip_S_BFu8i) C1{ Fp Fs Fi:8}



static void Test_Ip_S_BFu8i()
{
  {
    init_simple_test("Ip_S_BFu8i");
    static STRUCT_IF_C Ip_S_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_S_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu8i, Ip_S_BFu8i)
//============================================================================


struct  Ip_S_BFu8ll  {
  int *v1;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_S_BFu8ll) C1{ Fp Fs FL:8}



static void Test_Ip_S_BFu8ll()
{
  {
    init_simple_test("Ip_S_BFu8ll");
    static STRUCT_IF_C Ip_S_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_S_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu8ll, Ip_S_BFu8ll)
//============================================================================


struct  Ip_S_BFu8s  {
  int *v1;
  short v2;
  unsigned short v3:8;
};
//SIG(1 Ip_S_BFu8s) C1{ Fp Fs Fs:8}



static void Test_Ip_S_BFu8s()
{
  {
    init_simple_test("Ip_S_BFu8s");
    static STRUCT_IF_C Ip_S_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_S_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu8s, Ip_S_BFu8s)
//============================================================================


struct  Ip_S_BFu9i  {
  int *v1;
  short v2;
  unsigned int v3:9;
};
//SIG(1 Ip_S_BFu9i) C1{ Fp Fs Fi:9}



static void Test_Ip_S_BFu9i()
{
  {
    init_simple_test("Ip_S_BFu9i");
    static STRUCT_IF_C Ip_S_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_S_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu9i, Ip_S_BFu9i)
//============================================================================


struct  Ip_S_BFu9ll  {
  int *v1;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_S_BFu9ll) C1{ Fp Fs FL:9}



static void Test_Ip_S_BFu9ll()
{
  {
    init_simple_test("Ip_S_BFu9ll");
    static STRUCT_IF_C Ip_S_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_S_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu9ll, Ip_S_BFu9ll)
//============================================================================


struct  Ip_S_BFu9s  {
  int *v1;
  short v2;
  unsigned short v3:9;
};
//SIG(1 Ip_S_BFu9s) C1{ Fp Fs Fs:9}



static void Test_Ip_S_BFu9s()
{
  {
    init_simple_test("Ip_S_BFu9s");
    static STRUCT_IF_C Ip_S_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_S_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu9s, Ip_S_BFu9s)
//============================================================================


struct  Ip_S_C  {
  int *v1;
  short v2;
  char v3;
};
//SIG(1 Ip_S_C) C1{ Fp Fs Fc}



static void Test_Ip_S_C()
{
  {
    init_simple_test("Ip_S_C");
    STRUCT_IF_C Ip_S_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_C)");
    check_field_offset(lv, v1, 0, "Ip_S_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_C.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_C, Ip_S_C)
//============================================================================


struct  Ip_S_D  {
  int *v1;
  short v2;
  double v3;
};
//SIG(1 Ip_S_D) C1{ Fp Fs FL}



static void Test_Ip_S_D()
{
  {
    init_simple_test("Ip_S_D");
    STRUCT_IF_C Ip_S_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_D)");
    check_field_offset(lv, v1, 0, "Ip_S_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_D, Ip_S_D)
//============================================================================


struct  Ip_S_F  {
  int *v1;
  short v2;
  float v3;
};
//SIG(1 Ip_S_F) C1{ Fp Fs Fi}



static void Test_Ip_S_F()
{
  {
    init_simple_test("Ip_S_F");
    STRUCT_IF_C Ip_S_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_F)");
    check_field_offset(lv, v1, 0, "Ip_S_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_F, Ip_S_F)
//============================================================================


struct  Ip_S_I  {
  int *v1;
  short v2;
  int v3;
};
//SIG(1 Ip_S_I) C1{ Fp Fs Fi}



static void Test_Ip_S_I()
{
  {
    init_simple_test("Ip_S_I");
    STRUCT_IF_C Ip_S_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_I)");
    check_field_offset(lv, v1, 0, "Ip_S_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_I, Ip_S_I)
//============================================================================


struct  Ip_S_Ip  {
  int *v1;
  short v2;
  int *v3;
};
//SIG(1 Ip_S_Ip) C1{ Fp Fs Fp}



static void Test_Ip_S_Ip()
{
  {
    init_simple_test("Ip_S_Ip");
    STRUCT_IF_C Ip_S_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Ip)");
    check_field_offset(lv, v1, 0, "Ip_S_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Ip, Ip_S_Ip)
//============================================================================


struct  Ip_S_L  {
  int *v1;
  short v2;
  __tsi64 v3;
};
//SIG(1 Ip_S_L) C1{ Fp Fs FL}



static void Test_Ip_S_L()
{
  {
    init_simple_test("Ip_S_L");
    STRUCT_IF_C Ip_S_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_L)");
    check_field_offset(lv, v1, 0, "Ip_S_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_L, Ip_S_L)
//============================================================================


struct  Ip_S_S  {
  int *v1;
  short v2;
  short v3;
};
//SIG(1 Ip_S_S) C1{ Fp Fs[2]}



static void Test_Ip_S_S()
{
  {
    init_simple_test("Ip_S_S");
    STRUCT_IF_C Ip_S_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_S)");
    check_field_offset(lv, v1, 0, "Ip_S_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_S.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_S, Ip_S_S)
//============================================================================


struct  Ip_S_Uc  {
  int *v1;
  short v2;
  unsigned char v3;
};
//SIG(1 Ip_S_Uc) C1{ Fp Fs Fc}



static void Test_Ip_S_Uc()
{
  {
    init_simple_test("Ip_S_Uc");
    STRUCT_IF_C Ip_S_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Uc)");
    check_field_offset(lv, v1, 0, "Ip_S_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Uc, Ip_S_Uc)
//============================================================================


struct  Ip_S_Ui  {
  int *v1;
  short v2;
  unsigned int v3;
};
//SIG(1 Ip_S_Ui) C1{ Fp Fs Fi}



static void Test_Ip_S_Ui()
{
  {
    init_simple_test("Ip_S_Ui");
    STRUCT_IF_C Ip_S_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_S_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Ui)");
    check_field_offset(lv, v1, 0, "Ip_S_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Ui, Ip_S_Ui)
//============================================================================


struct  Ip_S_Ul  {
  int *v1;
  short v2;
  __tsu64 v3;
};
//SIG(1 Ip_S_Ul) C1{ Fp Fs FL}



static void Test_Ip_S_Ul()
{
  {
    init_simple_test("Ip_S_Ul");
    STRUCT_IF_C Ip_S_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Ul)");
    check_field_offset(lv, v1, 0, "Ip_S_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Ul, Ip_S_Ul)
//============================================================================


struct  Ip_S_Us  {
  int *v1;
  short v2;
  unsigned short v3;
};
//SIG(1 Ip_S_Us) C1{ Fp Fs[2]}



static void Test_Ip_S_Us()
{
  {
    init_simple_test("Ip_S_Us");
    STRUCT_IF_C Ip_S_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Us)");
    check_field_offset(lv, v1, 0, "Ip_S_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Us.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Us, Ip_S_Us)
//============================================================================


struct  Ip_S_Vp  {
  int *v1;
  short v2;
  void *v3;
};
//SIG(1 Ip_S_Vp) C1{ Fp Fs Fp}



static void Test_Ip_S_Vp()
{
  {
    init_simple_test("Ip_S_Vp");
    STRUCT_IF_C Ip_S_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_Vp)");
    check_field_offset(lv, v1, 0, "Ip_S_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_Vp, Ip_S_Vp)
//============================================================================


struct  Ip_Uc  {
  int *v1;
  unsigned char v2;
};
//SIG(1 Ip_Uc) C1{ Fp Fc}



static void Test_Ip_Uc()
{
  {
    init_simple_test("Ip_Uc");
    STRUCT_IF_C Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc, Ip_Uc)
//============================================================================


struct  Ip_Uc_BFu15i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Uc_BFu15i) C1{ Fp Fc Fi:15}



static void Test_Ip_Uc_BFu15i()
{
  {
    init_simple_test("Ip_Uc_BFu15i");
    static STRUCT_IF_C Ip_Uc_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_Uc_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu15i, Ip_Uc_BFu15i)
//============================================================================


struct  Ip_Uc_BFu15ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Uc_BFu15ll) C1{ Fp Fc FL:15}



static void Test_Ip_Uc_BFu15ll()
{
  {
    init_simple_test("Ip_Uc_BFu15ll");
    static STRUCT_IF_C Ip_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, 1, "Ip_Uc_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 15, hide_ull(1LL<<14), "Ip_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu15ll, Ip_Uc_BFu15ll)
//============================================================================


struct  Ip_Uc_BFu15s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Uc_BFu15s) C1{ Fp Fc Fs:15}



static void Test_Ip_Uc_BFu15s()
{
  {
    init_simple_test("Ip_Uc_BFu15s");
    static STRUCT_IF_C Ip_Uc_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_Uc_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu15s, Ip_Uc_BFu15s)
//============================================================================


struct  Ip_Uc_BFu16i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Uc_BFu16i) C1{ Fp Fc Fi:16}



static void Test_Ip_Uc_BFu16i()
{
  {
    init_simple_test("Ip_Uc_BFu16i");
    static STRUCT_IF_C Ip_Uc_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_Uc_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu16i, Ip_Uc_BFu16i)
//============================================================================


struct  Ip_Uc_BFu16ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Uc_BFu16ll) C1{ Fp Fc FL:16}



static void Test_Ip_Uc_BFu16ll()
{
  {
    init_simple_test("Ip_Uc_BFu16ll");
    static STRUCT_IF_C Ip_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, 1, "Ip_Uc_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 16, hide_ull(1LL<<15), "Ip_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu16ll, Ip_Uc_BFu16ll)
//============================================================================


struct  Ip_Uc_BFu16s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Uc_BFu16s) C1{ Fp Fc Fs:16}



static void Test_Ip_Uc_BFu16s()
{
  {
    init_simple_test("Ip_Uc_BFu16s");
    static STRUCT_IF_C Ip_Uc_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_Uc_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu16s, Ip_Uc_BFu16s)
//============================================================================


struct  Ip_Uc_BFu17i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Uc_BFu17i) C1{ Fp Fc Fi:17}



static void Test_Ip_Uc_BFu17i()
{
  {
    init_simple_test("Ip_Uc_BFu17i");
    static STRUCT_IF_C Ip_Uc_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_Uc_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu17i, Ip_Uc_BFu17i)
//============================================================================


struct  Ip_Uc_BFu17ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Uc_BFu17ll) C1{ Fp Fc FL:17}



static void Test_Ip_Uc_BFu17ll()
{
  {
    init_simple_test("Ip_Uc_BFu17ll");
    static STRUCT_IF_C Ip_Uc_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, 1, "Ip_Uc_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 17, hide_ull(1LL<<16), "Ip_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu17ll, Ip_Uc_BFu17ll)
//============================================================================


struct  Ip_Uc_BFu1c  {
  int *v1;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Uc_BFu1c) C1{ Fp Fc Fc:1}



static void Test_Ip_Uc_BFu1c()
{
  {
    init_simple_test("Ip_Uc_BFu1c");
    static STRUCT_IF_C Ip_Uc_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu1c, Ip_Uc_BFu1c)
//============================================================================


struct  Ip_Uc_BFu1i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Uc_BFu1i) C1{ Fp Fc Fi:1}



static void Test_Ip_Uc_BFu1i()
{
  {
    init_simple_test("Ip_Uc_BFu1i");
    static STRUCT_IF_C Ip_Uc_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu1i, Ip_Uc_BFu1i)
//============================================================================


struct  Ip_Uc_BFu1ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Uc_BFu1ll) C1{ Fp Fc FL:1}



static void Test_Ip_Uc_BFu1ll()
{
  {
    init_simple_test("Ip_Uc_BFu1ll");
    static STRUCT_IF_C Ip_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu1ll, Ip_Uc_BFu1ll)
//============================================================================


struct  Ip_Uc_BFu1s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Uc_BFu1s) C1{ Fp Fc Fs:1}



static void Test_Ip_Uc_BFu1s()
{
  {
    init_simple_test("Ip_Uc_BFu1s");
    static STRUCT_IF_C Ip_Uc_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 1, 1, "Ip_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu1s, Ip_Uc_BFu1s)
//============================================================================


struct  Ip_Uc_BFu31i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Uc_BFu31i) C1{ Fp Fc Fi:31}



static void Test_Ip_Uc_BFu31i()
{
  {
    init_simple_test("Ip_Uc_BFu31i");
    static STRUCT_IF_C Ip_Uc_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_Uc_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu31i, Ip_Uc_BFu31i)
//============================================================================


struct  Ip_Uc_BFu31ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Uc_BFu31ll) C1{ Fp Fc FL:31}



static void Test_Ip_Uc_BFu31ll()
{
  {
    init_simple_test("Ip_Uc_BFu31ll");
    static STRUCT_IF_C Ip_Uc_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, 1, "Ip_Uc_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 31, hide_ull(1LL<<30), "Ip_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu31ll, Ip_Uc_BFu31ll)
//============================================================================


struct  Ip_Uc_BFu32i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Uc_BFu32i) C1{ Fp Fc Fi:32}



static void Test_Ip_Uc_BFu32i()
{
  {
    init_simple_test("Ip_Uc_BFu32i");
    static STRUCT_IF_C Ip_Uc_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_Uc_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu32i, Ip_Uc_BFu32i)
//============================================================================


struct  Ip_Uc_BFu32ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Uc_BFu32ll) C1{ Fp Fc FL:32}



static void Test_Ip_Uc_BFu32ll()
{
  {
    init_simple_test("Ip_Uc_BFu32ll");
    static STRUCT_IF_C Ip_Uc_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, 1, "Ip_Uc_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 32, hide_ull(1LL<<31), "Ip_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu32ll, Ip_Uc_BFu32ll)
//============================================================================


struct  Ip_Uc_BFu33  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Uc_BFu33) C1{ Fp Fc FL:33}



static void Test_Ip_Uc_BFu33()
{
  {
    init_simple_test("Ip_Uc_BFu33");
    static STRUCT_IF_C Ip_Uc_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, 1, "Ip_Uc_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 33, hide_ull(1LL<<32), "Ip_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu33, Ip_Uc_BFu33)
//============================================================================


struct  Ip_Uc_BFu7c  {
  int *v1;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Uc_BFu7c) C1{ Fp Fc Fc:7}



static void Test_Ip_Uc_BFu7c()
{
  {
    init_simple_test("Ip_Uc_BFu7c");
    static STRUCT_IF_C Ip_Uc_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_Uc_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu7c, Ip_Uc_BFu7c)
//============================================================================


struct  Ip_Uc_BFu7i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Uc_BFu7i) C1{ Fp Fc Fi:7}



static void Test_Ip_Uc_BFu7i()
{
  {
    init_simple_test("Ip_Uc_BFu7i");
    static STRUCT_IF_C Ip_Uc_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_Uc_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu7i, Ip_Uc_BFu7i)
//============================================================================


struct  Ip_Uc_BFu7ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Uc_BFu7ll) C1{ Fp Fc FL:7}



static void Test_Ip_Uc_BFu7ll()
{
  {
    init_simple_test("Ip_Uc_BFu7ll");
    static STRUCT_IF_C Ip_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_Uc_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu7ll, Ip_Uc_BFu7ll)
//============================================================================


struct  Ip_Uc_BFu7s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Uc_BFu7s) C1{ Fp Fc Fs:7}



static void Test_Ip_Uc_BFu7s()
{
  {
    init_simple_test("Ip_Uc_BFu7s");
    static STRUCT_IF_C Ip_Uc_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, 1, "Ip_Uc_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 7, hide_ull(1LL<<6), "Ip_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu7s, Ip_Uc_BFu7s)
//============================================================================


struct  Ip_Uc_BFu8c  {
  int *v1;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Uc_BFu8c) C1{ Fp Fc Fc:8}



static void Test_Ip_Uc_BFu8c()
{
  {
    init_simple_test("Ip_Uc_BFu8c");
    static STRUCT_IF_C Ip_Uc_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_Uc_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu8c, Ip_Uc_BFu8c)
//============================================================================


struct  Ip_Uc_BFu8i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Uc_BFu8i) C1{ Fp Fc Fi:8}



static void Test_Ip_Uc_BFu8i()
{
  {
    init_simple_test("Ip_Uc_BFu8i");
    static STRUCT_IF_C Ip_Uc_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_Uc_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu8i, Ip_Uc_BFu8i)
//============================================================================


struct  Ip_Uc_BFu8ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Uc_BFu8ll) C1{ Fp Fc FL:8}



static void Test_Ip_Uc_BFu8ll()
{
  {
    init_simple_test("Ip_Uc_BFu8ll");
    static STRUCT_IF_C Ip_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_Uc_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu8ll, Ip_Uc_BFu8ll)
//============================================================================


struct  Ip_Uc_BFu8s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Uc_BFu8s) C1{ Fp Fc Fs:8}



static void Test_Ip_Uc_BFu8s()
{
  {
    init_simple_test("Ip_Uc_BFu8s");
    static STRUCT_IF_C Ip_Uc_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, 1, "Ip_Uc_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 8, hide_ull(1LL<<7), "Ip_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu8s, Ip_Uc_BFu8s)
//============================================================================


struct  Ip_Uc_BFu9i  {
  int *v1;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Uc_BFu9i) C1{ Fp Fc Fi:9}



static void Test_Ip_Uc_BFu9i()
{
  {
    init_simple_test("Ip_Uc_BFu9i");
    static STRUCT_IF_C Ip_Uc_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_Uc_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu9i, Ip_Uc_BFu9i)
//============================================================================


struct  Ip_Uc_BFu9ll  {
  int *v1;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Uc_BFu9ll) C1{ Fp Fc FL:9}



static void Test_Ip_Uc_BFu9ll()
{
  {
    init_simple_test("Ip_Uc_BFu9ll");
    static STRUCT_IF_C Ip_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, 1, "Ip_Uc_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(9,5), 0, 9, hide_ull(1LL<<8), "Ip_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu9ll, Ip_Uc_BFu9ll)
//============================================================================


struct  Ip_Uc_BFu9s  {
  int *v1;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Uc_BFu9s) C1{ Fp Fc Fs:9}



static void Test_Ip_Uc_BFu9s()
{
  {
    init_simple_test("Ip_Uc_BFu9s");
    static STRUCT_IF_C Ip_Uc_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_Uc_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu9s, Ip_Uc_BFu9s)
//============================================================================


struct  Ip_Uc_C  {
  int *v1;
  unsigned char v2;
  char v3;
};
//SIG(1 Ip_Uc_C) C1{ Fp Fc[2]}



static void Test_Ip_Uc_C()
{
  {
    init_simple_test("Ip_Uc_C");
    STRUCT_IF_C Ip_Uc_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_C)");
    check_field_offset(lv, v1, 0, "Ip_Uc_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_C.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_C, Ip_Uc_C)
//============================================================================


struct  Ip_Uc_D  {
  int *v1;
  unsigned char v2;
  double v3;
};
//SIG(1 Ip_Uc_D) C1{ Fp Fc FL}



static void Test_Ip_Uc_D()
{
  {
    init_simple_test("Ip_Uc_D");
    STRUCT_IF_C Ip_Uc_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_D)");
    check_field_offset(lv, v1, 0, "Ip_Uc_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_D, Ip_Uc_D)
//============================================================================


struct  Ip_Uc_F  {
  int *v1;
  unsigned char v2;
  float v3;
};
//SIG(1 Ip_Uc_F) C1{ Fp Fc Fi}



static void Test_Ip_Uc_F()
{
  {
    init_simple_test("Ip_Uc_F");
    STRUCT_IF_C Ip_Uc_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_F)");
    check_field_offset(lv, v1, 0, "Ip_Uc_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_F, Ip_Uc_F)
//============================================================================


struct  Ip_Uc_I  {
  int *v1;
  unsigned char v2;
  int v3;
};
//SIG(1 Ip_Uc_I) C1{ Fp Fc Fi}



static void Test_Ip_Uc_I()
{
  {
    init_simple_test("Ip_Uc_I");
    STRUCT_IF_C Ip_Uc_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_I)");
    check_field_offset(lv, v1, 0, "Ip_Uc_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_I, Ip_Uc_I)
//============================================================================


struct  Ip_Uc_Ip  {
  int *v1;
  unsigned char v2;
  int *v3;
};
//SIG(1 Ip_Uc_Ip) C1{ Fp Fc Fp}



static void Test_Ip_Uc_Ip()
{
  {
    init_simple_test("Ip_Uc_Ip");
    STRUCT_IF_C Ip_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Ip, Ip_Uc_Ip)
//============================================================================


struct  Ip_Uc_L  {
  int *v1;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 Ip_Uc_L) C1{ Fp Fc FL}



static void Test_Ip_Uc_L()
{
  {
    init_simple_test("Ip_Uc_L");
    STRUCT_IF_C Ip_Uc_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_L)");
    check_field_offset(lv, v1, 0, "Ip_Uc_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_L, Ip_Uc_L)
//============================================================================


struct  Ip_Uc_S  {
  int *v1;
  unsigned char v2;
  short v3;
};
//SIG(1 Ip_Uc_S) C1{ Fp Fc Fs}



static void Test_Ip_Uc_S()
{
  {
    init_simple_test("Ip_Uc_S");
    STRUCT_IF_C Ip_Uc_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_S)");
    check_field_offset(lv, v1, 0, "Ip_Uc_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_S.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_S, Ip_Uc_S)
//============================================================================


struct  Ip_Uc_Uc  {
  int *v1;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 Ip_Uc_Uc) C1{ Fp Fc[2]}



static void Test_Ip_Uc_Uc()
{
  {
    init_simple_test("Ip_Uc_Uc");
    STRUCT_IF_C Ip_Uc_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Ip_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Uc, Ip_Uc_Uc)
//============================================================================


struct  Ip_Uc_Ui  {
  int *v1;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 Ip_Uc_Ui) C1{ Fp Fc Fi}



static void Test_Ip_Uc_Ui()
{
  {
    init_simple_test("Ip_Uc_Ui");
    STRUCT_IF_C Ip_Uc_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Uc_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Ui, Ip_Uc_Ui)
//============================================================================


struct  Ip_Uc_Ul  {
  int *v1;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 Ip_Uc_Ul) C1{ Fp Fc FL}



static void Test_Ip_Uc_Ul()
{
  {
    init_simple_test("Ip_Uc_Ul");
    STRUCT_IF_C Ip_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Ul, Ip_Uc_Ul)
//============================================================================


struct  Ip_Uc_Us  {
  int *v1;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 Ip_Uc_Us) C1{ Fp Fc Fs}



static void Test_Ip_Uc_Us()
{
  {
    init_simple_test("Ip_Uc_Us");
    STRUCT_IF_C Ip_Uc_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Us)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Us.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Us, Ip_Uc_Us)
//============================================================================


struct  Ip_Uc_Vp  {
  int *v1;
  unsigned char v2;
  void *v3;
};
//SIG(1 Ip_Uc_Vp) C1{ Fp Fc Fp}



static void Test_Ip_Uc_Vp()
{
  {
    init_simple_test("Ip_Uc_Vp");
    STRUCT_IF_C Ip_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Uc_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_Vp, Ip_Uc_Vp)
//============================================================================


struct  Ip_Ui  {
  int *v1;
  unsigned int v2;
};
//SIG(1 Ip_Ui) C1{ Fp Fi}



static void Test_Ip_Ui()
{
  {
    init_simple_test("Ip_Ui");
    STRUCT_IF_C Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui, Ip_Ui)
//============================================================================


struct  Ip_Ui_BFu15i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Ui_BFu15i) C1{ Fp Fi Fi:15}



static void Test_Ip_Ui_BFu15i()
{
  {
    init_simple_test("Ip_Ui_BFu15i");
    static STRUCT_IF_C Ip_Ui_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_Ui_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu15i, Ip_Ui_BFu15i)
//============================================================================


struct  Ip_Ui_BFu15ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Ui_BFu15ll) C1{ Fp Fi FL:15}



static void Test_Ip_Ui_BFu15ll()
{
  {
    init_simple_test("Ip_Ui_BFu15ll");
    static STRUCT_IF_C Ip_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_Ui_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu15ll, Ip_Ui_BFu15ll)
//============================================================================


struct  Ip_Ui_BFu15s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Ui_BFu15s) C1{ Fp Fi Fs:15}



static void Test_Ip_Ui_BFu15s()
{
  {
    init_simple_test("Ip_Ui_BFu15s");
    static STRUCT_IF_C Ip_Ui_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, 1, "Ip_Ui_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 15, hide_ull(1LL<<14), "Ip_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu15s, Ip_Ui_BFu15s)
//============================================================================


struct  Ip_Ui_BFu16i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Ui_BFu16i) C1{ Fp Fi Fi:16}



static void Test_Ip_Ui_BFu16i()
{
  {
    init_simple_test("Ip_Ui_BFu16i");
    static STRUCT_IF_C Ip_Ui_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_Ui_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu16i, Ip_Ui_BFu16i)
//============================================================================


struct  Ip_Ui_BFu16ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Ui_BFu16ll) C1{ Fp Fi FL:16}



static void Test_Ip_Ui_BFu16ll()
{
  {
    init_simple_test("Ip_Ui_BFu16ll");
    static STRUCT_IF_C Ip_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_Ui_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu16ll, Ip_Ui_BFu16ll)
//============================================================================


struct  Ip_Ui_BFu16s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Ui_BFu16s) C1{ Fp Fi Fs:16}



static void Test_Ip_Ui_BFu16s()
{
  {
    init_simple_test("Ip_Ui_BFu16s");
    static STRUCT_IF_C Ip_Ui_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, 1, "Ip_Ui_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 16, hide_ull(1LL<<15), "Ip_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu16s, Ip_Ui_BFu16s)
//============================================================================


struct  Ip_Ui_BFu17i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Ui_BFu17i) C1{ Fp Fi Fi:17}



static void Test_Ip_Ui_BFu17i()
{
  {
    init_simple_test("Ip_Ui_BFu17i");
    static STRUCT_IF_C Ip_Ui_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_Ui_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu17i, Ip_Ui_BFu17i)
//============================================================================


struct  Ip_Ui_BFu17ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Ui_BFu17ll) C1{ Fp Fi FL:17}



static void Test_Ip_Ui_BFu17ll()
{
  {
    init_simple_test("Ip_Ui_BFu17ll");
    static STRUCT_IF_C Ip_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_Ui_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu17ll, Ip_Ui_BFu17ll)
//============================================================================


struct  Ip_Ui_BFu1c  {
  int *v1;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Ui_BFu1c) C1{ Fp Fi Fc:1}



static void Test_Ip_Ui_BFu1c()
{
  {
    init_simple_test("Ip_Ui_BFu1c");
    static STRUCT_IF_C Ip_Ui_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu1c, Ip_Ui_BFu1c)
//============================================================================


struct  Ip_Ui_BFu1i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Ui_BFu1i) C1{ Fp Fi Fi:1}



static void Test_Ip_Ui_BFu1i()
{
  {
    init_simple_test("Ip_Ui_BFu1i");
    static STRUCT_IF_C Ip_Ui_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu1i, Ip_Ui_BFu1i)
//============================================================================


struct  Ip_Ui_BFu1ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Ui_BFu1ll) C1{ Fp Fi FL:1}



static void Test_Ip_Ui_BFu1ll()
{
  {
    init_simple_test("Ip_Ui_BFu1ll");
    static STRUCT_IF_C Ip_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu1ll, Ip_Ui_BFu1ll)
//============================================================================


struct  Ip_Ui_BFu1s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Ui_BFu1s) C1{ Fp Fi Fs:1}



static void Test_Ip_Ui_BFu1s()
{
  {
    init_simple_test("Ip_Ui_BFu1s");
    static STRUCT_IF_C Ip_Ui_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 1, 1, "Ip_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu1s, Ip_Ui_BFu1s)
//============================================================================


struct  Ip_Ui_BFu31i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Ui_BFu31i) C1{ Fp Fi Fi:31}



static void Test_Ip_Ui_BFu31i()
{
  {
    init_simple_test("Ip_Ui_BFu31i");
    static STRUCT_IF_C Ip_Ui_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_Ui_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu31i, Ip_Ui_BFu31i)
//============================================================================


struct  Ip_Ui_BFu31ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Ui_BFu31ll) C1{ Fp Fi FL:31}



static void Test_Ip_Ui_BFu31ll()
{
  {
    init_simple_test("Ip_Ui_BFu31ll");
    static STRUCT_IF_C Ip_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_Ui_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu31ll, Ip_Ui_BFu31ll)
//============================================================================


struct  Ip_Ui_BFu32i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Ui_BFu32i) C1{ Fp Fi Fi:32}



static void Test_Ip_Ui_BFu32i()
{
  {
    init_simple_test("Ip_Ui_BFu32i");
    static STRUCT_IF_C Ip_Ui_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_Ui_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu32i, Ip_Ui_BFu32i)
//============================================================================


struct  Ip_Ui_BFu32ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Ui_BFu32ll) C1{ Fp Fi FL:32}



static void Test_Ip_Ui_BFu32ll()
{
  {
    init_simple_test("Ip_Ui_BFu32ll");
    static STRUCT_IF_C Ip_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_Ui_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu32ll, Ip_Ui_BFu32ll)
//============================================================================


struct  Ip_Ui_BFu33  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Ui_BFu33) C1{ Fp Fi FL:33}



static void Test_Ip_Ui_BFu33()
{
  {
    init_simple_test("Ip_Ui_BFu33");
    static STRUCT_IF_C Ip_Ui_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_Ui_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu33, Ip_Ui_BFu33)
//============================================================================


struct  Ip_Ui_BFu7c  {
  int *v1;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Ui_BFu7c) C1{ Fp Fi Fc:7}



static void Test_Ip_Ui_BFu7c()
{
  {
    init_simple_test("Ip_Ui_BFu7c");
    static STRUCT_IF_C Ip_Ui_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_Ui_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu7c, Ip_Ui_BFu7c)
//============================================================================


struct  Ip_Ui_BFu7i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Ui_BFu7i) C1{ Fp Fi Fi:7}



static void Test_Ip_Ui_BFu7i()
{
  {
    init_simple_test("Ip_Ui_BFu7i");
    static STRUCT_IF_C Ip_Ui_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_Ui_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu7i, Ip_Ui_BFu7i)
//============================================================================


struct  Ip_Ui_BFu7ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Ui_BFu7ll) C1{ Fp Fi FL:7}



static void Test_Ip_Ui_BFu7ll()
{
  {
    init_simple_test("Ip_Ui_BFu7ll");
    static STRUCT_IF_C Ip_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_Ui_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu7ll, Ip_Ui_BFu7ll)
//============================================================================


struct  Ip_Ui_BFu7s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Ui_BFu7s) C1{ Fp Fi Fs:7}



static void Test_Ip_Ui_BFu7s()
{
  {
    init_simple_test("Ip_Ui_BFu7s");
    static STRUCT_IF_C Ip_Ui_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, 1, "Ip_Ui_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 7, hide_ull(1LL<<6), "Ip_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu7s, Ip_Ui_BFu7s)
//============================================================================


struct  Ip_Ui_BFu8c  {
  int *v1;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Ui_BFu8c) C1{ Fp Fi Fc:8}



static void Test_Ip_Ui_BFu8c()
{
  {
    init_simple_test("Ip_Ui_BFu8c");
    static STRUCT_IF_C Ip_Ui_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_Ui_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu8c, Ip_Ui_BFu8c)
//============================================================================


struct  Ip_Ui_BFu8i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Ui_BFu8i) C1{ Fp Fi Fi:8}



static void Test_Ip_Ui_BFu8i()
{
  {
    init_simple_test("Ip_Ui_BFu8i");
    static STRUCT_IF_C Ip_Ui_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_Ui_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu8i, Ip_Ui_BFu8i)
//============================================================================


struct  Ip_Ui_BFu8ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Ui_BFu8ll) C1{ Fp Fi FL:8}



static void Test_Ip_Ui_BFu8ll()
{
  {
    init_simple_test("Ip_Ui_BFu8ll");
    static STRUCT_IF_C Ip_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_Ui_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu8ll, Ip_Ui_BFu8ll)
//============================================================================


struct  Ip_Ui_BFu8s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Ui_BFu8s) C1{ Fp Fi Fs:8}



static void Test_Ip_Ui_BFu8s()
{
  {
    init_simple_test("Ip_Ui_BFu8s");
    static STRUCT_IF_C Ip_Ui_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, 1, "Ip_Ui_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 8, hide_ull(1LL<<7), "Ip_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu8s, Ip_Ui_BFu8s)
//============================================================================


struct  Ip_Ui_BFu9i  {
  int *v1;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Ui_BFu9i) C1{ Fp Fi Fi:9}



static void Test_Ip_Ui_BFu9i()
{
  {
    init_simple_test("Ip_Ui_BFu9i");
    static STRUCT_IF_C Ip_Ui_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_Ui_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu9i, Ip_Ui_BFu9i)
//============================================================================


struct  Ip_Ui_BFu9ll  {
  int *v1;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Ui_BFu9ll) C1{ Fp Fi FL:9}



static void Test_Ip_Ui_BFu9ll()
{
  {
    init_simple_test("Ip_Ui_BFu9ll");
    static STRUCT_IF_C Ip_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_Ui_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu9ll, Ip_Ui_BFu9ll)
//============================================================================


struct  Ip_Ui_BFu9s  {
  int *v1;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Ui_BFu9s) C1{ Fp Fi Fs:9}



static void Test_Ip_Ui_BFu9s()
{
  {
    init_simple_test("Ip_Ui_BFu9s");
    static STRUCT_IF_C Ip_Ui_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, 1, "Ip_Ui_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 9, hide_ull(1LL<<8), "Ip_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu9s, Ip_Ui_BFu9s)
//============================================================================


struct  Ip_Ui_C  {
  int *v1;
  unsigned int v2;
  char v3;
};
//SIG(1 Ip_Ui_C) C1{ Fp Fi Fc}



static void Test_Ip_Ui_C()
{
  {
    init_simple_test("Ip_Ui_C");
    STRUCT_IF_C Ip_Ui_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_C)");
    check_field_offset(lv, v1, 0, "Ip_Ui_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_C.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_C, Ip_Ui_C)
//============================================================================


struct  Ip_Ui_D  {
  int *v1;
  unsigned int v2;
  double v3;
};
//SIG(1 Ip_Ui_D) C1{ Fp Fi FL}



static void Test_Ip_Ui_D()
{
  {
    init_simple_test("Ip_Ui_D");
    STRUCT_IF_C Ip_Ui_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_D)");
    check_field_offset(lv, v1, 0, "Ip_Ui_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_D, Ip_Ui_D)
//============================================================================


struct  Ip_Ui_F  {
  int *v1;
  unsigned int v2;
  float v3;
};
//SIG(1 Ip_Ui_F) C1{ Fp Fi[2]}



static void Test_Ip_Ui_F()
{
  {
    init_simple_test("Ip_Ui_F");
    STRUCT_IF_C Ip_Ui_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_F)");
    check_field_offset(lv, v1, 0, "Ip_Ui_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_F, Ip_Ui_F)
//============================================================================


struct  Ip_Ui_I  {
  int *v1;
  unsigned int v2;
  int v3;
};
//SIG(1 Ip_Ui_I) C1{ Fp Fi[2]}



static void Test_Ip_Ui_I()
{
  {
    init_simple_test("Ip_Ui_I");
    STRUCT_IF_C Ip_Ui_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_I)");
    check_field_offset(lv, v1, 0, "Ip_Ui_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_I, Ip_Ui_I)
//============================================================================


struct  Ip_Ui_Ip  {
  int *v1;
  unsigned int v2;
  int *v3;
};
//SIG(1 Ip_Ui_Ip) C1{ Fp Fi Fp}



static void Test_Ip_Ui_Ip()
{
  {
    init_simple_test("Ip_Ui_Ip");
    STRUCT_IF_C Ip_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Ip, Ip_Ui_Ip)
//============================================================================


struct  Ip_Ui_L  {
  int *v1;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 Ip_Ui_L) C1{ Fp Fi FL}



static void Test_Ip_Ui_L()
{
  {
    init_simple_test("Ip_Ui_L");
    STRUCT_IF_C Ip_Ui_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_L)");
    check_field_offset(lv, v1, 0, "Ip_Ui_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_L, Ip_Ui_L)
//============================================================================


struct  Ip_Ui_S  {
  int *v1;
  unsigned int v2;
  short v3;
};
//SIG(1 Ip_Ui_S) C1{ Fp Fi Fs}



static void Test_Ip_Ui_S()
{
  {
    init_simple_test("Ip_Ui_S");
    STRUCT_IF_C Ip_Ui_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_S)");
    check_field_offset(lv, v1, 0, "Ip_Ui_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_S.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_S, Ip_Ui_S)
//============================================================================


struct  Ip_Ui_Uc  {
  int *v1;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 Ip_Ui_Uc) C1{ Fp Fi Fc}



static void Test_Ip_Ui_Uc()
{
  {
    init_simple_test("Ip_Ui_Uc");
    STRUCT_IF_C Ip_Ui_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Uc, Ip_Ui_Uc)
//============================================================================


struct  Ip_Ui_Ui  {
  int *v1;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 Ip_Ui_Ui) C1{ Fp Fi[2]}



static void Test_Ip_Ui_Ui()
{
  {
    init_simple_test("Ip_Ui_Ui");
    STRUCT_IF_C Ip_Ui_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Ui, Ip_Ui_Ui)
//============================================================================


struct  Ip_Ui_Ul  {
  int *v1;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 Ip_Ui_Ul) C1{ Fp Fi FL}



static void Test_Ip_Ui_Ul()
{
  {
    init_simple_test("Ip_Ui_Ul");
    STRUCT_IF_C Ip_Ui_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Ul, Ip_Ui_Ul)
//============================================================================


struct  Ip_Ui_Us  {
  int *v1;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 Ip_Ui_Us) C1{ Fp Fi Fs}



static void Test_Ip_Ui_Us()
{
  {
    init_simple_test("Ip_Ui_Us");
    STRUCT_IF_C Ip_Ui_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ui_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Us)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Us.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Us, Ip_Ui_Us)
//============================================================================


struct  Ip_Ui_Vp  {
  int *v1;
  unsigned int v2;
  void *v3;
};
//SIG(1 Ip_Ui_Vp) C1{ Fp Fi Fp}



static void Test_Ip_Ui_Vp()
{
  {
    init_simple_test("Ip_Ui_Vp");
    STRUCT_IF_C Ip_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Ui_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_Vp, Ip_Ui_Vp)
//============================================================================


struct  Ip_Ul  {
  int *v1;
  __tsu64 v2;
};
//SIG(1 Ip_Ul) C1{ Fp FL}



static void Test_Ip_Ul()
{
  {
    init_simple_test("Ip_Ul");
    STRUCT_IF_C Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul, Ip_Ul)
//============================================================================


struct  Ip_Ul_BFu15i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Ul_BFu15i) C1{ Fp FL Fi:15}



static void Test_Ip_Ul_BFu15i()
{
  {
    init_simple_test("Ip_Ul_BFu15i");
    static STRUCT_IF_C Ip_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu15i, Ip_Ul_BFu15i)
//============================================================================


struct  Ip_Ul_BFu15ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Ul_BFu15ll) C1{ Fp FL FL:15}



static void Test_Ip_Ul_BFu15ll()
{
  {
    init_simple_test("Ip_Ul_BFu15ll");
    static STRUCT_IF_C Ip_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu15ll, Ip_Ul_BFu15ll)
//============================================================================


struct  Ip_Ul_BFu15s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Ul_BFu15s) C1{ Fp FL Fs:15}



static void Test_Ip_Ul_BFu15s()
{
  {
    init_simple_test("Ip_Ul_BFu15s");
    static STRUCT_IF_C Ip_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "Ip_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "Ip_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu15s, Ip_Ul_BFu15s)
//============================================================================


struct  Ip_Ul_BFu16i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Ul_BFu16i) C1{ Fp FL Fi:16}



static void Test_Ip_Ul_BFu16i()
{
  {
    init_simple_test("Ip_Ul_BFu16i");
    static STRUCT_IF_C Ip_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu16i, Ip_Ul_BFu16i)
//============================================================================


struct  Ip_Ul_BFu16ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Ul_BFu16ll) C1{ Fp FL FL:16}



static void Test_Ip_Ul_BFu16ll()
{
  {
    init_simple_test("Ip_Ul_BFu16ll");
    static STRUCT_IF_C Ip_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu16ll, Ip_Ul_BFu16ll)
//============================================================================


struct  Ip_Ul_BFu16s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Ul_BFu16s) C1{ Fp FL Fs:16}



static void Test_Ip_Ul_BFu16s()
{
  {
    init_simple_test("Ip_Ul_BFu16s");
    static STRUCT_IF_C Ip_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "Ip_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "Ip_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu16s, Ip_Ul_BFu16s)
//============================================================================


struct  Ip_Ul_BFu17i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Ul_BFu17i) C1{ Fp FL Fi:17}



static void Test_Ip_Ul_BFu17i()
{
  {
    init_simple_test("Ip_Ul_BFu17i");
    static STRUCT_IF_C Ip_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu17i, Ip_Ul_BFu17i)
//============================================================================


struct  Ip_Ul_BFu17ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Ul_BFu17ll) C1{ Fp FL FL:17}



static void Test_Ip_Ul_BFu17ll()
{
  {
    init_simple_test("Ip_Ul_BFu17ll");
    static STRUCT_IF_C Ip_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "Ip_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "Ip_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu17ll, Ip_Ul_BFu17ll)
//============================================================================


struct  Ip_Ul_BFu1c  {
  int *v1;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Ul_BFu1c) C1{ Fp FL Fc:1}



static void Test_Ip_Ul_BFu1c()
{
  {
    init_simple_test("Ip_Ul_BFu1c");
    static STRUCT_IF_C Ip_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu1c, Ip_Ul_BFu1c)
//============================================================================


struct  Ip_Ul_BFu1i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Ul_BFu1i) C1{ Fp FL Fi:1}



static void Test_Ip_Ul_BFu1i()
{
  {
    init_simple_test("Ip_Ul_BFu1i");
    static STRUCT_IF_C Ip_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu1i, Ip_Ul_BFu1i)
//============================================================================


struct  Ip_Ul_BFu1ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Ul_BFu1ll) C1{ Fp FL FL:1}



static void Test_Ip_Ul_BFu1ll()
{
  {
    init_simple_test("Ip_Ul_BFu1ll");
    static STRUCT_IF_C Ip_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu1ll, Ip_Ul_BFu1ll)
//============================================================================


struct  Ip_Ul_BFu1s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Ul_BFu1s) C1{ Fp FL Fs:1}



static void Test_Ip_Ul_BFu1s()
{
  {
    init_simple_test("Ip_Ul_BFu1s");
    static STRUCT_IF_C Ip_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "Ip_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu1s, Ip_Ul_BFu1s)
//============================================================================


struct  Ip_Ul_BFu31i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Ul_BFu31i) C1{ Fp FL Fi:31}



static void Test_Ip_Ul_BFu31i()
{
  {
    init_simple_test("Ip_Ul_BFu31i");
    static STRUCT_IF_C Ip_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu31i, Ip_Ul_BFu31i)
//============================================================================


struct  Ip_Ul_BFu31ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Ul_BFu31ll) C1{ Fp FL FL:31}



static void Test_Ip_Ul_BFu31ll()
{
  {
    init_simple_test("Ip_Ul_BFu31ll");
    static STRUCT_IF_C Ip_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "Ip_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "Ip_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu31ll, Ip_Ul_BFu31ll)
//============================================================================


struct  Ip_Ul_BFu32i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Ul_BFu32i) C1{ Fp FL Fi:32}



static void Test_Ip_Ul_BFu32i()
{
  {
    init_simple_test("Ip_Ul_BFu32i");
    static STRUCT_IF_C Ip_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu32i, Ip_Ul_BFu32i)
//============================================================================


struct  Ip_Ul_BFu32ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Ul_BFu32ll) C1{ Fp FL FL:32}



static void Test_Ip_Ul_BFu32ll()
{
  {
    init_simple_test("Ip_Ul_BFu32ll");
    static STRUCT_IF_C Ip_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "Ip_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "Ip_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu32ll, Ip_Ul_BFu32ll)
//============================================================================


struct  Ip_Ul_BFu33  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Ul_BFu33) C1{ Fp FL FL:33}



static void Test_Ip_Ul_BFu33()
{
  {
    init_simple_test("Ip_Ul_BFu33");
    static STRUCT_IF_C Ip_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "Ip_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "Ip_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu33, Ip_Ul_BFu33)
//============================================================================


struct  Ip_Ul_BFu7c  {
  int *v1;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Ul_BFu7c) C1{ Fp FL Fc:7}



static void Test_Ip_Ul_BFu7c()
{
  {
    init_simple_test("Ip_Ul_BFu7c");
    static STRUCT_IF_C Ip_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu7c, Ip_Ul_BFu7c)
//============================================================================


struct  Ip_Ul_BFu7i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Ul_BFu7i) C1{ Fp FL Fi:7}



static void Test_Ip_Ul_BFu7i()
{
  {
    init_simple_test("Ip_Ul_BFu7i");
    static STRUCT_IF_C Ip_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu7i, Ip_Ul_BFu7i)
//============================================================================


struct  Ip_Ul_BFu7ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Ul_BFu7ll) C1{ Fp FL FL:7}



static void Test_Ip_Ul_BFu7ll()
{
  {
    init_simple_test("Ip_Ul_BFu7ll");
    static STRUCT_IF_C Ip_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu7ll, Ip_Ul_BFu7ll)
//============================================================================


struct  Ip_Ul_BFu7s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Ul_BFu7s) C1{ Fp FL Fs:7}



static void Test_Ip_Ul_BFu7s()
{
  {
    init_simple_test("Ip_Ul_BFu7s");
    static STRUCT_IF_C Ip_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "Ip_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "Ip_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu7s, Ip_Ul_BFu7s)
//============================================================================


struct  Ip_Ul_BFu8c  {
  int *v1;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Ul_BFu8c) C1{ Fp FL Fc:8}



static void Test_Ip_Ul_BFu8c()
{
  {
    init_simple_test("Ip_Ul_BFu8c");
    static STRUCT_IF_C Ip_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu8c, Ip_Ul_BFu8c)
//============================================================================


struct  Ip_Ul_BFu8i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Ul_BFu8i) C1{ Fp FL Fi:8}



static void Test_Ip_Ul_BFu8i()
{
  {
    init_simple_test("Ip_Ul_BFu8i");
    static STRUCT_IF_C Ip_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu8i, Ip_Ul_BFu8i)
//============================================================================


struct  Ip_Ul_BFu8ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Ul_BFu8ll) C1{ Fp FL FL:8}



static void Test_Ip_Ul_BFu8ll()
{
  {
    init_simple_test("Ip_Ul_BFu8ll");
    static STRUCT_IF_C Ip_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu8ll, Ip_Ul_BFu8ll)
//============================================================================


struct  Ip_Ul_BFu8s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Ul_BFu8s) C1{ Fp FL Fs:8}



static void Test_Ip_Ul_BFu8s()
{
  {
    init_simple_test("Ip_Ul_BFu8s");
    static STRUCT_IF_C Ip_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "Ip_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "Ip_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu8s, Ip_Ul_BFu8s)
//============================================================================


struct  Ip_Ul_BFu9i  {
  int *v1;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Ul_BFu9i) C1{ Fp FL Fi:9}



static void Test_Ip_Ul_BFu9i()
{
  {
    init_simple_test("Ip_Ul_BFu9i");
    static STRUCT_IF_C Ip_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu9i, Ip_Ul_BFu9i)
//============================================================================


struct  Ip_Ul_BFu9ll  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Ul_BFu9ll) C1{ Fp FL FL:9}



static void Test_Ip_Ul_BFu9ll()
{
  {
    init_simple_test("Ip_Ul_BFu9ll");
    static STRUCT_IF_C Ip_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu9ll, Ip_Ul_BFu9ll)
//============================================================================


struct  Ip_Ul_BFu9s  {
  int *v1;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Ul_BFu9s) C1{ Fp FL Fs:9}



static void Test_Ip_Ul_BFu9s()
{
  {
    init_simple_test("Ip_Ul_BFu9s");
    static STRUCT_IF_C Ip_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "Ip_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "Ip_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu9s, Ip_Ul_BFu9s)
//============================================================================


struct  Ip_Ul_C  {
  int *v1;
  __tsu64 v2;
  char v3;
};
//SIG(1 Ip_Ul_C) C1{ Fp FL Fc}



static void Test_Ip_Ul_C()
{
  {
    init_simple_test("Ip_Ul_C");
    STRUCT_IF_C Ip_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_C)");
    check_field_offset(lv, v1, 0, "Ip_Ul_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_C, Ip_Ul_C)
//============================================================================


struct  Ip_Ul_D  {
  int *v1;
  __tsu64 v2;
  double v3;
};
//SIG(1 Ip_Ul_D) C1{ Fp FL[2]}



static void Test_Ip_Ul_D()
{
  {
    init_simple_test("Ip_Ul_D");
    STRUCT_IF_C Ip_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_D)");
    check_field_offset(lv, v1, 0, "Ip_Ul_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_D, Ip_Ul_D)
//============================================================================


struct  Ip_Ul_F  {
  int *v1;
  __tsu64 v2;
  float v3;
};
//SIG(1 Ip_Ul_F) C1{ Fp FL Fi}



static void Test_Ip_Ul_F()
{
  {
    init_simple_test("Ip_Ul_F");
    STRUCT_IF_C Ip_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_F)");
    check_field_offset(lv, v1, 0, "Ip_Ul_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_F, Ip_Ul_F)
//============================================================================


struct  Ip_Ul_I  {
  int *v1;
  __tsu64 v2;
  int v3;
};
//SIG(1 Ip_Ul_I) C1{ Fp FL Fi}



static void Test_Ip_Ul_I()
{
  {
    init_simple_test("Ip_Ul_I");
    STRUCT_IF_C Ip_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_I)");
    check_field_offset(lv, v1, 0, "Ip_Ul_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_I, Ip_Ul_I)
//============================================================================


struct  Ip_Ul_Ip  {
  int *v1;
  __tsu64 v2;
  int *v3;
};
//SIG(1 Ip_Ul_Ip) C1{ Fp FL Fp}



static void Test_Ip_Ul_Ip()
{
  {
    init_simple_test("Ip_Ul_Ip");
    STRUCT_IF_C Ip_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Ip, Ip_Ul_Ip)
//============================================================================


struct  Ip_Ul_L  {
  int *v1;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 Ip_Ul_L) C1{ Fp FL[2]}



static void Test_Ip_Ul_L()
{
  {
    init_simple_test("Ip_Ul_L");
    STRUCT_IF_C Ip_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_L)");
    check_field_offset(lv, v1, 0, "Ip_Ul_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_L, Ip_Ul_L)
//============================================================================


struct  Ip_Ul_S  {
  int *v1;
  __tsu64 v2;
  short v3;
};
//SIG(1 Ip_Ul_S) C1{ Fp FL Fs}



static void Test_Ip_Ul_S()
{
  {
    init_simple_test("Ip_Ul_S");
    STRUCT_IF_C Ip_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_S)");
    check_field_offset(lv, v1, 0, "Ip_Ul_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_S, Ip_Ul_S)
//============================================================================


struct  Ip_Ul_Uc  {
  int *v1;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 Ip_Ul_Uc) C1{ Fp FL Fc}



static void Test_Ip_Ul_Uc()
{
  {
    init_simple_test("Ip_Ul_Uc");
    STRUCT_IF_C Ip_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Uc, Ip_Ul_Uc)
//============================================================================


struct  Ip_Ul_Ui  {
  int *v1;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 Ip_Ul_Ui) C1{ Fp FL Fi}



static void Test_Ip_Ul_Ui()
{
  {
    init_simple_test("Ip_Ul_Ui");
    STRUCT_IF_C Ip_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Ui, Ip_Ul_Ui)
//============================================================================


struct  Ip_Ul_Ul  {
  int *v1;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 Ip_Ul_Ul) C1{ Fp FL[2]}



static void Test_Ip_Ul_Ul()
{
  {
    init_simple_test("Ip_Ul_Ul");
    STRUCT_IF_C Ip_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(Ip_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Ul, Ip_Ul_Ul)
//============================================================================


struct  Ip_Ul_Us  {
  int *v1;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 Ip_Ul_Us) C1{ Fp FL Fs}



static void Test_Ip_Ul_Us()
{
  {
    init_simple_test("Ip_Ul_Us");
    STRUCT_IF_C Ip_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Us)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Us, Ip_Ul_Us)
//============================================================================


struct  Ip_Ul_Vp  {
  int *v1;
  __tsu64 v2;
  void *v3;
};
//SIG(1 Ip_Ul_Vp) C1{ Fp FL Fp}



static void Test_Ip_Ul_Vp()
{
  {
    init_simple_test("Ip_Ul_Vp");
    STRUCT_IF_C Ip_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Ul_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ip_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_Vp, Ip_Ul_Vp)
//============================================================================


struct  Ip_Us  {
  int *v1;
  unsigned short v2;
};
//SIG(1 Ip_Us) C1{ Fp Fs}



static void Test_Ip_Us()
{
  {
    init_simple_test("Ip_Us");
    STRUCT_IF_C Ip_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us)");
    check_field_offset(lv, v1, 0, "Ip_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us, Ip_Us)
//============================================================================


struct  Ip_Us_BFu15i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Us_BFu15i) C1{ Fp Fs Fi:15}



static void Test_Ip_Us_BFu15i()
{
  {
    init_simple_test("Ip_Us_BFu15i");
    static STRUCT_IF_C Ip_Us_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_Us_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu15i, Ip_Us_BFu15i)
//============================================================================


struct  Ip_Us_BFu15ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Us_BFu15ll) C1{ Fp Fs FL:15}



static void Test_Ip_Us_BFu15ll()
{
  {
    init_simple_test("Ip_Us_BFu15ll");
    static STRUCT_IF_C Ip_Us_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_Us_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu15ll, Ip_Us_BFu15ll)
//============================================================================


struct  Ip_Us_BFu15s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Us_BFu15s) C1{ Fp Fs Fs:15}



static void Test_Ip_Us_BFu15s()
{
  {
    init_simple_test("Ip_Us_BFu15s");
    static STRUCT_IF_C Ip_Us_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, 1, "Ip_Us_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 15, hide_ull(1LL<<14), "Ip_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu15s, Ip_Us_BFu15s)
//============================================================================


struct  Ip_Us_BFu16i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Us_BFu16i) C1{ Fp Fs Fi:16}



static void Test_Ip_Us_BFu16i()
{
  {
    init_simple_test("Ip_Us_BFu16i");
    static STRUCT_IF_C Ip_Us_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_Us_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu16i, Ip_Us_BFu16i)
//============================================================================


struct  Ip_Us_BFu16ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Us_BFu16ll) C1{ Fp Fs FL:16}



static void Test_Ip_Us_BFu16ll()
{
  {
    init_simple_test("Ip_Us_BFu16ll");
    static STRUCT_IF_C Ip_Us_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_Us_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu16ll, Ip_Us_BFu16ll)
//============================================================================


struct  Ip_Us_BFu16s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Us_BFu16s) C1{ Fp Fs Fs:16}



static void Test_Ip_Us_BFu16s()
{
  {
    init_simple_test("Ip_Us_BFu16s");
    static STRUCT_IF_C Ip_Us_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, 1, "Ip_Us_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 16, hide_ull(1LL<<15), "Ip_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu16s, Ip_Us_BFu16s)
//============================================================================


struct  Ip_Us_BFu17i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Us_BFu17i) C1{ Fp Fs Fi:17}



static void Test_Ip_Us_BFu17i()
{
  {
    init_simple_test("Ip_Us_BFu17i");
    static STRUCT_IF_C Ip_Us_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, 1, "Ip_Us_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 17, hide_ull(1LL<<16), "Ip_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu17i, Ip_Us_BFu17i)
//============================================================================


struct  Ip_Us_BFu17ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Us_BFu17ll) C1{ Fp Fs FL:17}



static void Test_Ip_Us_BFu17ll()
{
  {
    init_simple_test("Ip_Us_BFu17ll");
    static STRUCT_IF_C Ip_Us_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 17, 1, "Ip_Us_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 17, hide_ull(1LL<<16), "Ip_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu17ll, Ip_Us_BFu17ll)
//============================================================================


struct  Ip_Us_BFu1c  {
  int *v1;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Us_BFu1c) C1{ Fp Fs Fc:1}



static void Test_Ip_Us_BFu1c()
{
  {
    init_simple_test("Ip_Us_BFu1c");
    static STRUCT_IF_C Ip_Us_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu1c, Ip_Us_BFu1c)
//============================================================================


struct  Ip_Us_BFu1i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Us_BFu1i) C1{ Fp Fs Fi:1}



static void Test_Ip_Us_BFu1i()
{
  {
    init_simple_test("Ip_Us_BFu1i");
    static STRUCT_IF_C Ip_Us_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu1i, Ip_Us_BFu1i)
//============================================================================


struct  Ip_Us_BFu1ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Us_BFu1ll) C1{ Fp Fs FL:1}



static void Test_Ip_Us_BFu1ll()
{
  {
    init_simple_test("Ip_Us_BFu1ll");
    static STRUCT_IF_C Ip_Us_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu1ll, Ip_Us_BFu1ll)
//============================================================================


struct  Ip_Us_BFu1s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Us_BFu1s) C1{ Fp Fs Fs:1}



static void Test_Ip_Us_BFu1s()
{
  {
    init_simple_test("Ip_Us_BFu1s");
    static STRUCT_IF_C Ip_Us_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 1, 1, "Ip_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu1s, Ip_Us_BFu1s)
//============================================================================


struct  Ip_Us_BFu31i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Us_BFu31i) C1{ Fp Fs Fi:31}



static void Test_Ip_Us_BFu31i()
{
  {
    init_simple_test("Ip_Us_BFu31i");
    static STRUCT_IF_C Ip_Us_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, 1, "Ip_Us_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 31, hide_ull(1LL<<30), "Ip_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu31i, Ip_Us_BFu31i)
//============================================================================


struct  Ip_Us_BFu31ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Us_BFu31ll) C1{ Fp Fs FL:31}



static void Test_Ip_Us_BFu31ll()
{
  {
    init_simple_test("Ip_Us_BFu31ll");
    static STRUCT_IF_C Ip_Us_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 31, 1, "Ip_Us_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 31, hide_ull(1LL<<30), "Ip_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu31ll, Ip_Us_BFu31ll)
//============================================================================


struct  Ip_Us_BFu32i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Us_BFu32i) C1{ Fp Fs Fi:32}



static void Test_Ip_Us_BFu32i()
{
  {
    init_simple_test("Ip_Us_BFu32i");
    static STRUCT_IF_C Ip_Us_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, 1, "Ip_Us_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(12,8), 0, 32, hide_ull(1LL<<31), "Ip_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu32i, Ip_Us_BFu32i)
//============================================================================


struct  Ip_Us_BFu32ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Us_BFu32ll) C1{ Fp Fs FL:32}



static void Test_Ip_Us_BFu32ll()
{
  {
    init_simple_test("Ip_Us_BFu32ll");
    static STRUCT_IF_C Ip_Us_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 32, 1, "Ip_Us_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 32, hide_ull(1LL<<31), "Ip_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu32ll, Ip_Us_BFu32ll)
//============================================================================


struct  Ip_Us_BFu33  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Us_BFu33) C1{ Fp Fs FL:33}



static void Test_Ip_Us_BFu33()
{
  {
    init_simple_test("Ip_Us_BFu33");
    static STRUCT_IF_C Ip_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 33, 1, "Ip_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 33, hide_ull(1LL<<32), "Ip_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu33, Ip_Us_BFu33)
//============================================================================


struct  Ip_Us_BFu7c  {
  int *v1;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Us_BFu7c) C1{ Fp Fs Fc:7}



static void Test_Ip_Us_BFu7c()
{
  {
    init_simple_test("Ip_Us_BFu7c");
    static STRUCT_IF_C Ip_Us_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_Us_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu7c, Ip_Us_BFu7c)
//============================================================================


struct  Ip_Us_BFu7i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Us_BFu7i) C1{ Fp Fs Fi:7}



static void Test_Ip_Us_BFu7i()
{
  {
    init_simple_test("Ip_Us_BFu7i");
    static STRUCT_IF_C Ip_Us_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_Us_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu7i, Ip_Us_BFu7i)
//============================================================================


struct  Ip_Us_BFu7ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Us_BFu7ll) C1{ Fp Fs FL:7}



static void Test_Ip_Us_BFu7ll()
{
  {
    init_simple_test("Ip_Us_BFu7ll");
    static STRUCT_IF_C Ip_Us_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_Us_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu7ll, Ip_Us_BFu7ll)
//============================================================================


struct  Ip_Us_BFu7s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Us_BFu7s) C1{ Fp Fs Fs:7}



static void Test_Ip_Us_BFu7s()
{
  {
    init_simple_test("Ip_Us_BFu7s");
    static STRUCT_IF_C Ip_Us_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, 1, "Ip_Us_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 7, hide_ull(1LL<<6), "Ip_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu7s, Ip_Us_BFu7s)
//============================================================================


struct  Ip_Us_BFu8c  {
  int *v1;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Us_BFu8c) C1{ Fp Fs Fc:8}



static void Test_Ip_Us_BFu8c()
{
  {
    init_simple_test("Ip_Us_BFu8c");
    static STRUCT_IF_C Ip_Us_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_Us_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu8c, Ip_Us_BFu8c)
//============================================================================


struct  Ip_Us_BFu8i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Us_BFu8i) C1{ Fp Fs Fi:8}



static void Test_Ip_Us_BFu8i()
{
  {
    init_simple_test("Ip_Us_BFu8i");
    static STRUCT_IF_C Ip_Us_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_Us_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu8i, Ip_Us_BFu8i)
//============================================================================


struct  Ip_Us_BFu8ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Us_BFu8ll) C1{ Fp Fs FL:8}



static void Test_Ip_Us_BFu8ll()
{
  {
    init_simple_test("Ip_Us_BFu8ll");
    static STRUCT_IF_C Ip_Us_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_Us_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu8ll, Ip_Us_BFu8ll)
//============================================================================


struct  Ip_Us_BFu8s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Us_BFu8s) C1{ Fp Fs Fs:8}



static void Test_Ip_Us_BFu8s()
{
  {
    init_simple_test("Ip_Us_BFu8s");
    static STRUCT_IF_C Ip_Us_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, 1, "Ip_Us_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 8, hide_ull(1LL<<7), "Ip_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu8s, Ip_Us_BFu8s)
//============================================================================


struct  Ip_Us_BFu9i  {
  int *v1;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Us_BFu9i) C1{ Fp Fs Fi:9}



static void Test_Ip_Us_BFu9i()
{
  {
    init_simple_test("Ip_Us_BFu9i");
    static STRUCT_IF_C Ip_Us_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_Us_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu9i, Ip_Us_BFu9i)
//============================================================================


struct  Ip_Us_BFu9ll  {
  int *v1;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Us_BFu9ll) C1{ Fp Fs FL:9}



static void Test_Ip_Us_BFu9ll()
{
  {
    init_simple_test("Ip_Us_BFu9ll");
    static STRUCT_IF_C Ip_Us_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_Us_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu9ll, Ip_Us_BFu9ll)
//============================================================================


struct  Ip_Us_BFu9s  {
  int *v1;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Us_BFu9s) C1{ Fp Fs Fs:9}



static void Test_Ip_Us_BFu9s()
{
  {
    init_simple_test("Ip_Us_BFu9s");
    static STRUCT_IF_C Ip_Us_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, 1, "Ip_Us_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(10,6), 0, 9, hide_ull(1LL<<8), "Ip_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu9s, Ip_Us_BFu9s)
//============================================================================


struct  Ip_Us_C  {
  int *v1;
  unsigned short v2;
  char v3;
};
//SIG(1 Ip_Us_C) C1{ Fp Fs Fc}



static void Test_Ip_Us_C()
{
  {
    init_simple_test("Ip_Us_C");
    STRUCT_IF_C Ip_Us_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_C)");
    check_field_offset(lv, v1, 0, "Ip_Us_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_C.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_C, Ip_Us_C)
//============================================================================


struct  Ip_Us_D  {
  int *v1;
  unsigned short v2;
  double v3;
};
//SIG(1 Ip_Us_D) C1{ Fp Fs FL}



static void Test_Ip_Us_D()
{
  {
    init_simple_test("Ip_Us_D");
    STRUCT_IF_C Ip_Us_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_D)");
    check_field_offset(lv, v1, 0, "Ip_Us_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_D, Ip_Us_D)
//============================================================================


struct  Ip_Us_F  {
  int *v1;
  unsigned short v2;
  float v3;
};
//SIG(1 Ip_Us_F) C1{ Fp Fs Fi}



static void Test_Ip_Us_F()
{
  {
    init_simple_test("Ip_Us_F");
    STRUCT_IF_C Ip_Us_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_F)");
    check_field_offset(lv, v1, 0, "Ip_Us_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_F.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_F, Ip_Us_F)
//============================================================================


struct  Ip_Us_I  {
  int *v1;
  unsigned short v2;
  int v3;
};
//SIG(1 Ip_Us_I) C1{ Fp Fs Fi}



static void Test_Ip_Us_I()
{
  {
    init_simple_test("Ip_Us_I");
    STRUCT_IF_C Ip_Us_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_I)");
    check_field_offset(lv, v1, 0, "Ip_Us_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_I.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_I, Ip_Us_I)
//============================================================================


struct  Ip_Us_Ip  {
  int *v1;
  unsigned short v2;
  int *v3;
};
//SIG(1 Ip_Us_Ip) C1{ Fp Fs Fp}



static void Test_Ip_Us_Ip()
{
  {
    init_simple_test("Ip_Us_Ip");
    STRUCT_IF_C Ip_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Us_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Ip, Ip_Us_Ip)
//============================================================================


struct  Ip_Us_L  {
  int *v1;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 Ip_Us_L) C1{ Fp Fs FL}



static void Test_Ip_Us_L()
{
  {
    init_simple_test("Ip_Us_L");
    STRUCT_IF_C Ip_Us_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_L)");
    check_field_offset(lv, v1, 0, "Ip_Us_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_L, Ip_Us_L)
//============================================================================


struct  Ip_Us_S  {
  int *v1;
  unsigned short v2;
  short v3;
};
//SIG(1 Ip_Us_S) C1{ Fp Fs[2]}



static void Test_Ip_Us_S()
{
  {
    init_simple_test("Ip_Us_S");
    STRUCT_IF_C Ip_Us_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_S)");
    check_field_offset(lv, v1, 0, "Ip_Us_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_S.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_S, Ip_Us_S)
//============================================================================


struct  Ip_Us_Uc  {
  int *v1;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 Ip_Us_Uc) C1{ Fp Fs Fc}



static void Test_Ip_Us_Uc()
{
  {
    init_simple_test("Ip_Us_Uc");
    STRUCT_IF_C Ip_Us_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Us_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Uc, Ip_Us_Uc)
//============================================================================


struct  Ip_Us_Ui  {
  int *v1;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 Ip_Us_Ui) C1{ Fp Fs Fi}



static void Test_Ip_Us_Ui()
{
  {
    init_simple_test("Ip_Us_Ui");
    STRUCT_IF_C Ip_Us_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Us_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Us_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Ip_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Ui, Ip_Us_Ui)
//============================================================================


struct  Ip_Us_Ul  {
  int *v1;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 Ip_Us_Ul) C1{ Fp Fs FL}



static void Test_Ip_Us_Ul()
{
  {
    init_simple_test("Ip_Us_Ul");
    STRUCT_IF_C Ip_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Us_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Ul, Ip_Us_Ul)
//============================================================================


struct  Ip_Us_Us  {
  int *v1;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 Ip_Us_Us) C1{ Fp Fs[2]}



static void Test_Ip_Us_Us()
{
  {
    init_simple_test("Ip_Us_Us");
    STRUCT_IF_C Ip_Us_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Us)");
    check_field_offset(lv, v1, 0, "Ip_Us_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Us.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Ip_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Us, Ip_Us_Us)
//============================================================================


struct  Ip_Us_Vp  {
  int *v1;
  unsigned short v2;
  void *v3;
};
//SIG(1 Ip_Us_Vp) C1{ Fp Fs Fp}



static void Test_Ip_Us_Vp()
{
  {
    init_simple_test("Ip_Us_Vp");
    STRUCT_IF_C Ip_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Us_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_Vp, Ip_Us_Vp)
//============================================================================


struct  Ip_Vp  {
  int *v1;
  void *v2;
};
//SIG(1 Ip_Vp) C1{ Fp[2]}



static void Test_Ip_Vp()
{
  {
    init_simple_test("Ip_Vp");
    STRUCT_IF_C Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp, Ip_Vp)
//============================================================================


struct  Ip_Vp_BFu15i  {
  int *v1;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 Ip_Vp_BFu15i) C1{ Fp[2] Fi:15}



static void Test_Ip_Vp_BFu15i()
{
  {
    init_simple_test("Ip_Vp_BFu15i");
    static STRUCT_IF_C Ip_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu15i, Ip_Vp_BFu15i)
//============================================================================


struct  Ip_Vp_BFu15ll  {
  int *v1;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 Ip_Vp_BFu15ll) C1{ Fp[2] FL:15}



static void Test_Ip_Vp_BFu15ll()
{
  {
    init_simple_test("Ip_Vp_BFu15ll");
    static STRUCT_IF_C Ip_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu15ll, Ip_Vp_BFu15ll)
//============================================================================


struct  Ip_Vp_BFu15s  {
  int *v1;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 Ip_Vp_BFu15s) C1{ Fp[2] Fs:15}



static void Test_Ip_Vp_BFu15s()
{
  {
    init_simple_test("Ip_Vp_BFu15s");
    static STRUCT_IF_C Ip_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "Ip_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "Ip_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu15s, Ip_Vp_BFu15s)
//============================================================================


struct  Ip_Vp_BFu16i  {
  int *v1;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 Ip_Vp_BFu16i) C1{ Fp[2] Fi:16}



static void Test_Ip_Vp_BFu16i()
{
  {
    init_simple_test("Ip_Vp_BFu16i");
    static STRUCT_IF_C Ip_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu16i, Ip_Vp_BFu16i)
//============================================================================


struct  Ip_Vp_BFu16ll  {
  int *v1;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 Ip_Vp_BFu16ll) C1{ Fp[2] FL:16}



static void Test_Ip_Vp_BFu16ll()
{
  {
    init_simple_test("Ip_Vp_BFu16ll");
    static STRUCT_IF_C Ip_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu16ll, Ip_Vp_BFu16ll)
//============================================================================


struct  Ip_Vp_BFu16s  {
  int *v1;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 Ip_Vp_BFu16s) C1{ Fp[2] Fs:16}



static void Test_Ip_Vp_BFu16s()
{
  {
    init_simple_test("Ip_Vp_BFu16s");
    static STRUCT_IF_C Ip_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "Ip_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "Ip_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu16s, Ip_Vp_BFu16s)
//============================================================================


struct  Ip_Vp_BFu17i  {
  int *v1;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 Ip_Vp_BFu17i) C1{ Fp[2] Fi:17}



static void Test_Ip_Vp_BFu17i()
{
  {
    init_simple_test("Ip_Vp_BFu17i");
    static STRUCT_IF_C Ip_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Ip_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Ip_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu17i, Ip_Vp_BFu17i)
//============================================================================


struct  Ip_Vp_BFu17ll  {
  int *v1;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 Ip_Vp_BFu17ll) C1{ Fp[2] FL:17}



static void Test_Ip_Vp_BFu17ll()
{
  {
    init_simple_test("Ip_Vp_BFu17ll");
    static STRUCT_IF_C Ip_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "Ip_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "Ip_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu17ll, Ip_Vp_BFu17ll)
//============================================================================


struct  Ip_Vp_BFu1c  {
  int *v1;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 Ip_Vp_BFu1c) C1{ Fp[2] Fc:1}



static void Test_Ip_Vp_BFu1c()
{
  {
    init_simple_test("Ip_Vp_BFu1c");
    static STRUCT_IF_C Ip_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu1c, Ip_Vp_BFu1c)
//============================================================================


struct  Ip_Vp_BFu1i  {
  int *v1;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 Ip_Vp_BFu1i) C1{ Fp[2] Fi:1}



static void Test_Ip_Vp_BFu1i()
{
  {
    init_simple_test("Ip_Vp_BFu1i");
    static STRUCT_IF_C Ip_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu1i, Ip_Vp_BFu1i)
//============================================================================


struct  Ip_Vp_BFu1ll  {
  int *v1;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 Ip_Vp_BFu1ll) C1{ Fp[2] FL:1}



static void Test_Ip_Vp_BFu1ll()
{
  {
    init_simple_test("Ip_Vp_BFu1ll");
    static STRUCT_IF_C Ip_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu1ll, Ip_Vp_BFu1ll)
//============================================================================


struct  Ip_Vp_BFu1s  {
  int *v1;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 Ip_Vp_BFu1s) C1{ Fp[2] Fs:1}



static void Test_Ip_Vp_BFu1s()
{
  {
    init_simple_test("Ip_Vp_BFu1s");
    static STRUCT_IF_C Ip_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "Ip_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu1s, Ip_Vp_BFu1s)
//============================================================================


struct  Ip_Vp_BFu31i  {
  int *v1;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 Ip_Vp_BFu31i) C1{ Fp[2] Fi:31}



static void Test_Ip_Vp_BFu31i()
{
  {
    init_simple_test("Ip_Vp_BFu31i");
    static STRUCT_IF_C Ip_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Ip_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Ip_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu31i, Ip_Vp_BFu31i)
//============================================================================


struct  Ip_Vp_BFu31ll  {
  int *v1;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 Ip_Vp_BFu31ll) C1{ Fp[2] FL:31}



static void Test_Ip_Vp_BFu31ll()
{
  {
    init_simple_test("Ip_Vp_BFu31ll");
    static STRUCT_IF_C Ip_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "Ip_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "Ip_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu31ll, Ip_Vp_BFu31ll)
//============================================================================


struct  Ip_Vp_BFu32i  {
  int *v1;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 Ip_Vp_BFu32i) C1{ Fp[2] Fi:32}



static void Test_Ip_Vp_BFu32i()
{
  {
    init_simple_test("Ip_Vp_BFu32i");
    static STRUCT_IF_C Ip_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Ip_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Ip_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu32i, Ip_Vp_BFu32i)
//============================================================================


struct  Ip_Vp_BFu32ll  {
  int *v1;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 Ip_Vp_BFu32ll) C1{ Fp[2] FL:32}



static void Test_Ip_Vp_BFu32ll()
{
  {
    init_simple_test("Ip_Vp_BFu32ll");
    static STRUCT_IF_C Ip_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "Ip_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "Ip_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu32ll, Ip_Vp_BFu32ll)
//============================================================================


struct  Ip_Vp_BFu33  {
  int *v1;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 Ip_Vp_BFu33) C1{ Fp[2] FL:33}



static void Test_Ip_Vp_BFu33()
{
  {
    init_simple_test("Ip_Vp_BFu33");
    static STRUCT_IF_C Ip_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "Ip_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "Ip_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu33, Ip_Vp_BFu33)
//============================================================================


struct  Ip_Vp_BFu7c  {
  int *v1;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 Ip_Vp_BFu7c) C1{ Fp[2] Fc:7}



static void Test_Ip_Vp_BFu7c()
{
  {
    init_simple_test("Ip_Vp_BFu7c");
    static STRUCT_IF_C Ip_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu7c, Ip_Vp_BFu7c)
//============================================================================


struct  Ip_Vp_BFu7i  {
  int *v1;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 Ip_Vp_BFu7i) C1{ Fp[2] Fi:7}



static void Test_Ip_Vp_BFu7i()
{
  {
    init_simple_test("Ip_Vp_BFu7i");
    static STRUCT_IF_C Ip_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu7i, Ip_Vp_BFu7i)
//============================================================================


struct  Ip_Vp_BFu7ll  {
  int *v1;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 Ip_Vp_BFu7ll) C1{ Fp[2] FL:7}



static void Test_Ip_Vp_BFu7ll()
{
  {
    init_simple_test("Ip_Vp_BFu7ll");
    static STRUCT_IF_C Ip_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu7ll, Ip_Vp_BFu7ll)
//============================================================================


struct  Ip_Vp_BFu7s  {
  int *v1;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 Ip_Vp_BFu7s) C1{ Fp[2] Fs:7}



static void Test_Ip_Vp_BFu7s()
{
  {
    init_simple_test("Ip_Vp_BFu7s");
    static STRUCT_IF_C Ip_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "Ip_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "Ip_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu7s, Ip_Vp_BFu7s)
//============================================================================


struct  Ip_Vp_BFu8c  {
  int *v1;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 Ip_Vp_BFu8c) C1{ Fp[2] Fc:8}



static void Test_Ip_Vp_BFu8c()
{
  {
    init_simple_test("Ip_Vp_BFu8c");
    static STRUCT_IF_C Ip_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu8c, Ip_Vp_BFu8c)
//============================================================================


struct  Ip_Vp_BFu8i  {
  int *v1;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 Ip_Vp_BFu8i) C1{ Fp[2] Fi:8}



static void Test_Ip_Vp_BFu8i()
{
  {
    init_simple_test("Ip_Vp_BFu8i");
    static STRUCT_IF_C Ip_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu8i, Ip_Vp_BFu8i)
//============================================================================


struct  Ip_Vp_BFu8ll  {
  int *v1;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 Ip_Vp_BFu8ll) C1{ Fp[2] FL:8}



static void Test_Ip_Vp_BFu8ll()
{
  {
    init_simple_test("Ip_Vp_BFu8ll");
    static STRUCT_IF_C Ip_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu8ll, Ip_Vp_BFu8ll)
//============================================================================


struct  Ip_Vp_BFu8s  {
  int *v1;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 Ip_Vp_BFu8s) C1{ Fp[2] Fs:8}



static void Test_Ip_Vp_BFu8s()
{
  {
    init_simple_test("Ip_Vp_BFu8s");
    static STRUCT_IF_C Ip_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "Ip_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "Ip_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu8s, Ip_Vp_BFu8s)
//============================================================================


struct  Ip_Vp_BFu9i  {
  int *v1;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 Ip_Vp_BFu9i) C1{ Fp[2] Fi:9}



static void Test_Ip_Vp_BFu9i()
{
  {
    init_simple_test("Ip_Vp_BFu9i");
    static STRUCT_IF_C Ip_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu9i, Ip_Vp_BFu9i)
//============================================================================


struct  Ip_Vp_BFu9ll  {
  int *v1;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 Ip_Vp_BFu9ll) C1{ Fp[2] FL:9}



static void Test_Ip_Vp_BFu9ll()
{
  {
    init_simple_test("Ip_Vp_BFu9ll");
    static STRUCT_IF_C Ip_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu9ll, Ip_Vp_BFu9ll)
//============================================================================


struct  Ip_Vp_BFu9s  {
  int *v1;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 Ip_Vp_BFu9s) C1{ Fp[2] Fs:9}



static void Test_Ip_Vp_BFu9s()
{
  {
    init_simple_test("Ip_Vp_BFu9s");
    static STRUCT_IF_C Ip_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "Ip_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "Ip_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu9s, Ip_Vp_BFu9s)
//============================================================================


struct  Ip_Vp_C  {
  int *v1;
  void *v2;
  char v3;
};
//SIG(1 Ip_Vp_C) C1{ Fp[2] Fc}



static void Test_Ip_Vp_C()
{
  {
    init_simple_test("Ip_Vp_C");
    STRUCT_IF_C Ip_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_C)");
    check_field_offset(lv, v1, 0, "Ip_Vp_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_C, Ip_Vp_C)
//============================================================================


struct  Ip_Vp_D  {
  int *v1;
  void *v2;
  double v3;
};
//SIG(1 Ip_Vp_D) C1{ Fp[2] FL}



static void Test_Ip_Vp_D()
{
  {
    init_simple_test("Ip_Vp_D");
    STRUCT_IF_C Ip_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_D)");
    check_field_offset(lv, v1, 0, "Ip_Vp_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_D, Ip_Vp_D)
//============================================================================


struct  Ip_Vp_F  {
  int *v1;
  void *v2;
  float v3;
};
//SIG(1 Ip_Vp_F) C1{ Fp[2] Fi}



static void Test_Ip_Vp_F()
{
  {
    init_simple_test("Ip_Vp_F");
    STRUCT_IF_C Ip_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_F)");
    check_field_offset(lv, v1, 0, "Ip_Vp_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_F, Ip_Vp_F)
//============================================================================


struct  Ip_Vp_I  {
  int *v1;
  void *v2;
  int v3;
};
//SIG(1 Ip_Vp_I) C1{ Fp[2] Fi}



static void Test_Ip_Vp_I()
{
  {
    init_simple_test("Ip_Vp_I");
    STRUCT_IF_C Ip_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_I)");
    check_field_offset(lv, v1, 0, "Ip_Vp_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_I, Ip_Vp_I)
//============================================================================


struct  Ip_Vp_Ip  {
  int *v1;
  void *v2;
  int *v3;
};
//SIG(1 Ip_Vp_Ip) C1{ Fp[3]}



static void Test_Ip_Vp_Ip()
{
  {
    init_simple_test("Ip_Vp_Ip");
    STRUCT_IF_C Ip_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Ip)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Ip, Ip_Vp_Ip)
//============================================================================


struct  Ip_Vp_L  {
  int *v1;
  void *v2;
  __tsi64 v3;
};
//SIG(1 Ip_Vp_L) C1{ Fp[2] FL}



static void Test_Ip_Vp_L()
{
  {
    init_simple_test("Ip_Vp_L");
    STRUCT_IF_C Ip_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_L)");
    check_field_offset(lv, v1, 0, "Ip_Vp_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_L, Ip_Vp_L)
//============================================================================


struct  Ip_Vp_S  {
  int *v1;
  void *v2;
  short v3;
};
//SIG(1 Ip_Vp_S) C1{ Fp[2] Fs}



static void Test_Ip_Vp_S()
{
  {
    init_simple_test("Ip_Vp_S");
    STRUCT_IF_C Ip_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_S)");
    check_field_offset(lv, v1, 0, "Ip_Vp_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_S, Ip_Vp_S)
//============================================================================


struct  Ip_Vp_Uc  {
  int *v1;
  void *v2;
  unsigned char v3;
};
//SIG(1 Ip_Vp_Uc) C1{ Fp[2] Fc}



static void Test_Ip_Vp_Uc()
{
  {
    init_simple_test("Ip_Vp_Uc");
    STRUCT_IF_C Ip_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Uc)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Uc, Ip_Vp_Uc)
//============================================================================


struct  Ip_Vp_Ui  {
  int *v1;
  void *v2;
  unsigned int v3;
};
//SIG(1 Ip_Vp_Ui) C1{ Fp[2] Fi}



static void Test_Ip_Vp_Ui()
{
  {
    init_simple_test("Ip_Vp_Ui");
    STRUCT_IF_C Ip_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Ui)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Ui, Ip_Vp_Ui)
//============================================================================


struct  Ip_Vp_Ul  {
  int *v1;
  void *v2;
  __tsu64 v3;
};
//SIG(1 Ip_Vp_Ul) C1{ Fp[2] FL}



static void Test_Ip_Vp_Ul()
{
  {
    init_simple_test("Ip_Vp_Ul");
    STRUCT_IF_C Ip_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(Ip_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Ul)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Ul, Ip_Vp_Ul)
//============================================================================


struct  Ip_Vp_Us  {
  int *v1;
  void *v2;
  unsigned short v3;
};
//SIG(1 Ip_Vp_Us) C1{ Fp[2] Fs}



static void Test_Ip_Vp_Us()
{
  {
    init_simple_test("Ip_Vp_Us");
    STRUCT_IF_C Ip_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Us)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Us, Ip_Vp_Us)
//============================================================================


struct  Ip_Vp_Vp  {
  int *v1;
  void *v2;
  void *v3;
};
//SIG(1 Ip_Vp_Vp) C1{ Fp[3]}



static void Test_Ip_Vp_Vp()
{
  {
    init_simple_test("Ip_Vp_Vp");
    STRUCT_IF_C Ip_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(Ip_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_Vp)");
    check_field_offset(lv, v1, 0, "Ip_Vp_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ip_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_Vp, Ip_Vp_Vp)
//============================================================================


struct  L  {
  __tsi64 v1;
};
//SIG(1 L) C1{ FL}



static void Test_L()
{
  {
    init_simple_test("L");
    STRUCT_IF_C L lv;
    check2(sizeof(lv), 8, "sizeof(L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L)");
    check_field_offset(lv, v1, 0, "L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L, L)
//============================================================================


struct  L_BFu15i  {
  __tsi64 v1;
  unsigned int v2:15;
};
//SIG(1 L_BFu15i) C1{ FL Fi:15}



static void Test_L_BFu15i()
{
  {
    init_simple_test("L_BFu15i");
    static STRUCT_IF_C L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i, L_BFu15i)
//============================================================================


struct  L_BFu15i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 L_BFu15i_BFu15i) C1{ FL Fi:15 Fi:15}



static void Test_L_BFu15i_BFu15i()
{
  {
    init_simple_test("L_BFu15i_BFu15i");
    static STRUCT_IF_C L_BFu15i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu15i, L_BFu15i_BFu15i)
//============================================================================


struct  L_BFu15i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 L_BFu15i_BFu15ll) C1{ FL Fi:15 FL:15}



static void Test_L_BFu15i_BFu15ll()
{
  {
    init_simple_test("L_BFu15i_BFu15ll");
    static STRUCT_IF_C L_BFu15i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu15ll, L_BFu15i_BFu15ll)
//============================================================================


struct  L_BFu15i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 L_BFu15i_BFu15s) C1{ FL Fi:15 Fs:15}



static void Test_L_BFu15i_BFu15s()
{
  {
    init_simple_test("L_BFu15i_BFu15s");
    static STRUCT_IF_C L_BFu15i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu15s, L_BFu15i_BFu15s)
//============================================================================


struct  L_BFu15i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 L_BFu15i_BFu16i) C1{ FL Fi:15 Fi:16}



static void Test_L_BFu15i_BFu16i()
{
  {
    init_simple_test("L_BFu15i_BFu16i");
    static STRUCT_IF_C L_BFu15i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu16i, L_BFu15i_BFu16i)
//============================================================================


struct  L_BFu15i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 L_BFu15i_BFu16ll) C1{ FL Fi:15 FL:16}



static void Test_L_BFu15i_BFu16ll()
{
  {
    init_simple_test("L_BFu15i_BFu16ll");
    static STRUCT_IF_C L_BFu15i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu16ll, L_BFu15i_BFu16ll)
//============================================================================


struct  L_BFu15i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 L_BFu15i_BFu16s) C1{ FL Fi:15 Fs:16}



static void Test_L_BFu15i_BFu16s()
{
  {
    init_simple_test("L_BFu15i_BFu16s");
    static STRUCT_IF_C L_BFu15i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu16s, L_BFu15i_BFu16s)
//============================================================================


struct  L_BFu15i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 L_BFu15i_BFu17i) C1{ FL Fi:15 Fi:17}



static void Test_L_BFu15i_BFu17i()
{
  {
    init_simple_test("L_BFu15i_BFu17i");
    static STRUCT_IF_C L_BFu15i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu17i, L_BFu15i_BFu17i)
//============================================================================


struct  L_BFu15i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 L_BFu15i_BFu17ll) C1{ FL Fi:15 FL:17}



static void Test_L_BFu15i_BFu17ll()
{
  {
    init_simple_test("L_BFu15i_BFu17ll");
    static STRUCT_IF_C L_BFu15i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu17ll, L_BFu15i_BFu17ll)
//============================================================================


struct  L_BFu15i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 L_BFu15i_BFu1c) C1{ FL Fi:15 Fc:1}



static void Test_L_BFu15i_BFu1c()
{
  {
    init_simple_test("L_BFu15i_BFu1c");
    static STRUCT_IF_C L_BFu15i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu1c, L_BFu15i_BFu1c)
//============================================================================


struct  L_BFu15i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 L_BFu15i_BFu1i) C1{ FL Fi:15 Fi:1}



static void Test_L_BFu15i_BFu1i()
{
  {
    init_simple_test("L_BFu15i_BFu1i");
    static STRUCT_IF_C L_BFu15i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu1i, L_BFu15i_BFu1i)
//============================================================================


struct  L_BFu15i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 L_BFu15i_BFu1ll) C1{ FL Fi:15 FL:1}



static void Test_L_BFu15i_BFu1ll()
{
  {
    init_simple_test("L_BFu15i_BFu1ll");
    static STRUCT_IF_C L_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu1ll, L_BFu15i_BFu1ll)
//============================================================================


struct  L_BFu15i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 L_BFu15i_BFu1s) C1{ FL Fi:15 Fs:1}



static void Test_L_BFu15i_BFu1s()
{
  {
    init_simple_test("L_BFu15i_BFu1s");
    static STRUCT_IF_C L_BFu15i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu1s, L_BFu15i_BFu1s)
//============================================================================


struct  L_BFu15i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 L_BFu15i_BFu31i) C1{ FL Fi:15 Fi:31}



static void Test_L_BFu15i_BFu31i()
{
  {
    init_simple_test("L_BFu15i_BFu31i");
    static STRUCT_IF_C L_BFu15i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu31i, L_BFu15i_BFu31i)
//============================================================================


struct  L_BFu15i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 L_BFu15i_BFu31ll) C1{ FL Fi:15 FL:31}



static void Test_L_BFu15i_BFu31ll()
{
  {
    init_simple_test("L_BFu15i_BFu31ll");
    static STRUCT_IF_C L_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, 1, "L_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, hide_ull(1LL<<30), "L_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu31ll, L_BFu15i_BFu31ll)
//============================================================================


struct  L_BFu15i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 L_BFu15i_BFu32i) C1{ FL Fi:15 Fi:32}



static void Test_L_BFu15i_BFu32i()
{
  {
    init_simple_test("L_BFu15i_BFu32i");
    static STRUCT_IF_C L_BFu15i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu32i, L_BFu15i_BFu32i)
//============================================================================


struct  L_BFu15i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 L_BFu15i_BFu32ll) C1{ FL Fi:15 FL:32}



static void Test_L_BFu15i_BFu32ll()
{
  {
    init_simple_test("L_BFu15i_BFu32ll");
    static STRUCT_IF_C L_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, 1, "L_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, hide_ull(1LL<<31), "L_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu32ll, L_BFu15i_BFu32ll)
//============================================================================


struct  L_BFu15i_BFu33  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 L_BFu15i_BFu33) C1{ FL Fi:15 FL:33}



static void Test_L_BFu15i_BFu33()
{
  {
    init_simple_test("L_BFu15i_BFu33");
    static STRUCT_IF_C L_BFu15i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, 1, "L_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, hide_ull(1LL<<32), "L_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu33, L_BFu15i_BFu33)
//============================================================================


struct  L_BFu15i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 L_BFu15i_BFu7c) C1{ FL Fi:15 Fc:7}



static void Test_L_BFu15i_BFu7c()
{
  {
    init_simple_test("L_BFu15i_BFu7c");
    static STRUCT_IF_C L_BFu15i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu7c, L_BFu15i_BFu7c)
//============================================================================


struct  L_BFu15i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 L_BFu15i_BFu7i) C1{ FL Fi:15 Fi:7}



static void Test_L_BFu15i_BFu7i()
{
  {
    init_simple_test("L_BFu15i_BFu7i");
    static STRUCT_IF_C L_BFu15i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu7i, L_BFu15i_BFu7i)
//============================================================================


struct  L_BFu15i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 L_BFu15i_BFu7ll) C1{ FL Fi:15 FL:7}



static void Test_L_BFu15i_BFu7ll()
{
  {
    init_simple_test("L_BFu15i_BFu7ll");
    static STRUCT_IF_C L_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu7ll, L_BFu15i_BFu7ll)
//============================================================================


struct  L_BFu15i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 L_BFu15i_BFu7s) C1{ FL Fi:15 Fs:7}



static void Test_L_BFu15i_BFu7s()
{
  {
    init_simple_test("L_BFu15i_BFu7s");
    static STRUCT_IF_C L_BFu15i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu7s, L_BFu15i_BFu7s)
//============================================================================


struct  L_BFu15i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 L_BFu15i_BFu8c) C1{ FL Fi:15 Fc:8}



static void Test_L_BFu15i_BFu8c()
{
  {
    init_simple_test("L_BFu15i_BFu8c");
    static STRUCT_IF_C L_BFu15i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu8c, L_BFu15i_BFu8c)
//============================================================================


struct  L_BFu15i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 L_BFu15i_BFu8i) C1{ FL Fi:15 Fi:8}



static void Test_L_BFu15i_BFu8i()
{
  {
    init_simple_test("L_BFu15i_BFu8i");
    static STRUCT_IF_C L_BFu15i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu8i, L_BFu15i_BFu8i)
//============================================================================


struct  L_BFu15i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 L_BFu15i_BFu8ll) C1{ FL Fi:15 FL:8}



static void Test_L_BFu15i_BFu8ll()
{
  {
    init_simple_test("L_BFu15i_BFu8ll");
    static STRUCT_IF_C L_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu8ll, L_BFu15i_BFu8ll)
//============================================================================


struct  L_BFu15i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 L_BFu15i_BFu8s) C1{ FL Fi:15 Fs:8}



static void Test_L_BFu15i_BFu8s()
{
  {
    init_simple_test("L_BFu15i_BFu8s");
    static STRUCT_IF_C L_BFu15i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu8s, L_BFu15i_BFu8s)
//============================================================================


struct  L_BFu15i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 L_BFu15i_BFu9i) C1{ FL Fi:15 Fi:9}



static void Test_L_BFu15i_BFu9i()
{
  {
    init_simple_test("L_BFu15i_BFu9i");
    static STRUCT_IF_C L_BFu15i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu9i, L_BFu15i_BFu9i)
//============================================================================


struct  L_BFu15i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 L_BFu15i_BFu9ll) C1{ FL Fi:15 FL:9}



static void Test_L_BFu15i_BFu9ll()
{
  {
    init_simple_test("L_BFu15i_BFu9ll");
    static STRUCT_IF_C L_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu9ll, L_BFu15i_BFu9ll)
//============================================================================


struct  L_BFu15i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 L_BFu15i_BFu9s) C1{ FL Fi:15 Fs:9}



static void Test_L_BFu15i_BFu9s()
{
  {
    init_simple_test("L_BFu15i_BFu9s");
    static STRUCT_IF_C L_BFu15i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu9s, L_BFu15i_BFu9s)
//============================================================================


struct  L_BFu15i_C  {
  __tsi64 v1;
  unsigned int v2:15;
  char v3;
};
//SIG(1 L_BFu15i_C) C1{ FL Fi:15 Fc}



static void Test_L_BFu15i_C()
{
  {
    init_simple_test("L_BFu15i_C");
    static STRUCT_IF_C L_BFu15i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_C)");
    check_field_offset(lv, v1, 0, "L_BFu15i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_C");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_C");
    check_field_offset(lv, v3, 10, "L_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_C, L_BFu15i_C)
//============================================================================


struct  L_BFu15i_D  {
  __tsi64 v1;
  unsigned int v2:15;
  double v3;
};
//SIG(1 L_BFu15i_D) C1{ FL Fi:15 FL}



static void Test_L_BFu15i_D()
{
  {
    init_simple_test("L_BFu15i_D");
    static STRUCT_IF_C L_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_D)");
    check_field_offset(lv, v1, 0, "L_BFu15i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_D");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_D, L_BFu15i_D)
//============================================================================


struct  L_BFu15i_F  {
  __tsi64 v1;
  unsigned int v2:15;
  float v3;
};
//SIG(1 L_BFu15i_F) C1{ FL Fi:15 Fi}



static void Test_L_BFu15i_F()
{
  {
    init_simple_test("L_BFu15i_F");
    static STRUCT_IF_C L_BFu15i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_F)");
    check_field_offset(lv, v1, 0, "L_BFu15i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_F");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_F");
    check_field_offset(lv, v3, 12, "L_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_F, L_BFu15i_F)
//============================================================================


struct  L_BFu15i_I  {
  __tsi64 v1;
  unsigned int v2:15;
  int v3;
};
//SIG(1 L_BFu15i_I) C1{ FL Fi:15 Fi}



static void Test_L_BFu15i_I()
{
  {
    init_simple_test("L_BFu15i_I");
    static STRUCT_IF_C L_BFu15i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_I)");
    check_field_offset(lv, v1, 0, "L_BFu15i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_I");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_I");
    check_field_offset(lv, v3, 12, "L_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_I, L_BFu15i_I)
//============================================================================


struct  L_BFu15i_Ip  {
  __tsi64 v1;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 L_BFu15i_Ip) C1{ FL Fi:15 Fp}



static void Test_L_BFu15i_Ip()
{
  {
    init_simple_test("L_BFu15i_Ip");
    static STRUCT_IF_C L_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Ip, L_BFu15i_Ip)
//============================================================================


struct  L_BFu15i_L  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 L_BFu15i_L) C1{ FL Fi:15 FL}



static void Test_L_BFu15i_L()
{
  {
    init_simple_test("L_BFu15i_L");
    static STRUCT_IF_C L_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_L)");
    check_field_offset(lv, v1, 0, "L_BFu15i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_L");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_L, L_BFu15i_L)
//============================================================================


struct  L_BFu15i_S  {
  __tsi64 v1;
  unsigned int v2:15;
  short v3;
};
//SIG(1 L_BFu15i_S) C1{ FL Fi:15 Fs}



static void Test_L_BFu15i_S()
{
  {
    init_simple_test("L_BFu15i_S");
    static STRUCT_IF_C L_BFu15i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_S)");
    check_field_offset(lv, v1, 0, "L_BFu15i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_S");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_S");
    check_field_offset(lv, v3, 10, "L_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_S, L_BFu15i_S)
//============================================================================


struct  L_BFu15i_Uc  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 L_BFu15i_Uc) C1{ FL Fi:15 Fc}



static void Test_L_BFu15i_Uc()
{
  {
    init_simple_test("L_BFu15i_Uc");
    static STRUCT_IF_C L_BFu15i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Uc");
    check_field_offset(lv, v3, 10, "L_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Uc, L_BFu15i_Uc)
//============================================================================


struct  L_BFu15i_Ui  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 L_BFu15i_Ui) C1{ FL Fi:15 Fi}



static void Test_L_BFu15i_Ui()
{
  {
    init_simple_test("L_BFu15i_Ui");
    static STRUCT_IF_C L_BFu15i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Ui, L_BFu15i_Ui)
//============================================================================


struct  L_BFu15i_Ul  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 L_BFu15i_Ul) C1{ FL Fi:15 FL}



static void Test_L_BFu15i_Ul()
{
  {
    init_simple_test("L_BFu15i_Ul");
    static STRUCT_IF_C L_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Ul, L_BFu15i_Ul)
//============================================================================


struct  L_BFu15i_Us  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 L_BFu15i_Us) C1{ FL Fi:15 Fs}



static void Test_L_BFu15i_Us()
{
  {
    init_simple_test("L_BFu15i_Us");
    static STRUCT_IF_C L_BFu15i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Us");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Us");
    check_field_offset(lv, v3, 10, "L_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Us, L_BFu15i_Us)
//============================================================================


struct  L_BFu15i_Vp  {
  __tsi64 v1;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 L_BFu15i_Vp) C1{ FL Fi:15 Fp}



static void Test_L_BFu15i_Vp()
{
  {
    init_simple_test("L_BFu15i_Vp");
    static STRUCT_IF_C L_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu15i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_Vp, L_BFu15i_Vp)
//============================================================================


struct  L_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:15;
};
//SIG(1 L_BFu15ll) C1{ FL FL:15}



static void Test_L_BFu15ll()
{
  {
    init_simple_test("L_BFu15ll");
    static STRUCT_IF_C L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll, L_BFu15ll)
//============================================================================


struct  L_BFu15ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 L_BFu15ll_BFu15i) C1{ FL FL:15 Fi:15}



static void Test_L_BFu15ll_BFu15i()
{
  {
    init_simple_test("L_BFu15ll_BFu15i");
    static STRUCT_IF_C L_BFu15ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu15i, L_BFu15ll_BFu15i)
//============================================================================


struct  L_BFu15ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 L_BFu15ll_BFu15ll) C1{ FL FL:15 FL:15}



static void Test_L_BFu15ll_BFu15ll()
{
  {
    init_simple_test("L_BFu15ll_BFu15ll");
    static STRUCT_IF_C L_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu15ll, L_BFu15ll_BFu15ll)
//============================================================================


struct  L_BFu15ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 L_BFu15ll_BFu15s) C1{ FL FL:15 Fs:15}



static void Test_L_BFu15ll_BFu15s()
{
  {
    init_simple_test("L_BFu15ll_BFu15s");
    static STRUCT_IF_C L_BFu15ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu15s, L_BFu15ll_BFu15s)
//============================================================================


struct  L_BFu15ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 L_BFu15ll_BFu16i) C1{ FL FL:15 Fi:16}



static void Test_L_BFu15ll_BFu16i()
{
  {
    init_simple_test("L_BFu15ll_BFu16i");
    static STRUCT_IF_C L_BFu15ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu16i, L_BFu15ll_BFu16i)
//============================================================================


struct  L_BFu15ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 L_BFu15ll_BFu16ll) C1{ FL FL:15 FL:16}



static void Test_L_BFu15ll_BFu16ll()
{
  {
    init_simple_test("L_BFu15ll_BFu16ll");
    static STRUCT_IF_C L_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu16ll, L_BFu15ll_BFu16ll)
//============================================================================


struct  L_BFu15ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 L_BFu15ll_BFu16s) C1{ FL FL:15 Fs:16}



static void Test_L_BFu15ll_BFu16s()
{
  {
    init_simple_test("L_BFu15ll_BFu16s");
    static STRUCT_IF_C L_BFu15ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu16s, L_BFu15ll_BFu16s)
//============================================================================


struct  L_BFu15ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 L_BFu15ll_BFu17i) C1{ FL FL:15 Fi:17}



static void Test_L_BFu15ll_BFu17i()
{
  {
    init_simple_test("L_BFu15ll_BFu17i");
    static STRUCT_IF_C L_BFu15ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu17i, L_BFu15ll_BFu17i)
//============================================================================


struct  L_BFu15ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 L_BFu15ll_BFu17ll) C1{ FL FL:15 FL:17}



static void Test_L_BFu15ll_BFu17ll()
{
  {
    init_simple_test("L_BFu15ll_BFu17ll");
    static STRUCT_IF_C L_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu17ll, L_BFu15ll_BFu17ll)
//============================================================================


struct  L_BFu15ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 L_BFu15ll_BFu1c) C1{ FL FL:15 Fc:1}



static void Test_L_BFu15ll_BFu1c()
{
  {
    init_simple_test("L_BFu15ll_BFu1c");
    static STRUCT_IF_C L_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu1c, L_BFu15ll_BFu1c)
//============================================================================


struct  L_BFu15ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 L_BFu15ll_BFu1i) C1{ FL FL:15 Fi:1}



static void Test_L_BFu15ll_BFu1i()
{
  {
    init_simple_test("L_BFu15ll_BFu1i");
    static STRUCT_IF_C L_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu1i, L_BFu15ll_BFu1i)
//============================================================================


struct  L_BFu15ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 L_BFu15ll_BFu1ll) C1{ FL FL:15 FL:1}



static void Test_L_BFu15ll_BFu1ll()
{
  {
    init_simple_test("L_BFu15ll_BFu1ll");
    static STRUCT_IF_C L_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu1ll, L_BFu15ll_BFu1ll)
//============================================================================


struct  L_BFu15ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 L_BFu15ll_BFu1s) C1{ FL FL:15 Fs:1}



static void Test_L_BFu15ll_BFu1s()
{
  {
    init_simple_test("L_BFu15ll_BFu1s");
    static STRUCT_IF_C L_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu1s, L_BFu15ll_BFu1s)
//============================================================================


struct  L_BFu15ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 L_BFu15ll_BFu31i) C1{ FL FL:15 Fi:31}



static void Test_L_BFu15ll_BFu31i()
{
  {
    init_simple_test("L_BFu15ll_BFu31i");
    static STRUCT_IF_C L_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu31i, L_BFu15ll_BFu31i)
//============================================================================


struct  L_BFu15ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 L_BFu15ll_BFu31ll) C1{ FL FL:15 FL:31}



static void Test_L_BFu15ll_BFu31ll()
{
  {
    init_simple_test("L_BFu15ll_BFu31ll");
    static STRUCT_IF_C L_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, 1, "L_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, hide_ull(1LL<<30), "L_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu31ll, L_BFu15ll_BFu31ll)
//============================================================================


struct  L_BFu15ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 L_BFu15ll_BFu32i) C1{ FL FL:15 Fi:32}



static void Test_L_BFu15ll_BFu32i()
{
  {
    init_simple_test("L_BFu15ll_BFu32i");
    static STRUCT_IF_C L_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu32i, L_BFu15ll_BFu32i)
//============================================================================


struct  L_BFu15ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 L_BFu15ll_BFu32ll) C1{ FL FL:15 FL:32}



static void Test_L_BFu15ll_BFu32ll()
{
  {
    init_simple_test("L_BFu15ll_BFu32ll");
    static STRUCT_IF_C L_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, 1, "L_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, hide_ull(1LL<<31), "L_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu32ll, L_BFu15ll_BFu32ll)
//============================================================================


struct  L_BFu15ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 L_BFu15ll_BFu33) C1{ FL FL:15 FL:33}



static void Test_L_BFu15ll_BFu33()
{
  {
    init_simple_test("L_BFu15ll_BFu33");
    static STRUCT_IF_C L_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, 1, "L_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, hide_ull(1LL<<32), "L_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu33, L_BFu15ll_BFu33)
//============================================================================


struct  L_BFu15ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 L_BFu15ll_BFu7c) C1{ FL FL:15 Fc:7}



static void Test_L_BFu15ll_BFu7c()
{
  {
    init_simple_test("L_BFu15ll_BFu7c");
    static STRUCT_IF_C L_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu7c, L_BFu15ll_BFu7c)
//============================================================================


struct  L_BFu15ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 L_BFu15ll_BFu7i) C1{ FL FL:15 Fi:7}



static void Test_L_BFu15ll_BFu7i()
{
  {
    init_simple_test("L_BFu15ll_BFu7i");
    static STRUCT_IF_C L_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu7i, L_BFu15ll_BFu7i)
//============================================================================


struct  L_BFu15ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 L_BFu15ll_BFu7ll) C1{ FL FL:15 FL:7}



static void Test_L_BFu15ll_BFu7ll()
{
  {
    init_simple_test("L_BFu15ll_BFu7ll");
    static STRUCT_IF_C L_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu7ll, L_BFu15ll_BFu7ll)
//============================================================================


struct  L_BFu15ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 L_BFu15ll_BFu7s) C1{ FL FL:15 Fs:7}



static void Test_L_BFu15ll_BFu7s()
{
  {
    init_simple_test("L_BFu15ll_BFu7s");
    static STRUCT_IF_C L_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu7s, L_BFu15ll_BFu7s)
//============================================================================


struct  L_BFu15ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 L_BFu15ll_BFu8c) C1{ FL FL:15 Fc:8}



static void Test_L_BFu15ll_BFu8c()
{
  {
    init_simple_test("L_BFu15ll_BFu8c");
    static STRUCT_IF_C L_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu8c, L_BFu15ll_BFu8c)
//============================================================================


struct  L_BFu15ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 L_BFu15ll_BFu8i) C1{ FL FL:15 Fi:8}



static void Test_L_BFu15ll_BFu8i()
{
  {
    init_simple_test("L_BFu15ll_BFu8i");
    static STRUCT_IF_C L_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu8i, L_BFu15ll_BFu8i)
//============================================================================


struct  L_BFu15ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 L_BFu15ll_BFu8ll) C1{ FL FL:15 FL:8}



static void Test_L_BFu15ll_BFu8ll()
{
  {
    init_simple_test("L_BFu15ll_BFu8ll");
    static STRUCT_IF_C L_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu8ll, L_BFu15ll_BFu8ll)
//============================================================================


struct  L_BFu15ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 L_BFu15ll_BFu8s) C1{ FL FL:15 Fs:8}



static void Test_L_BFu15ll_BFu8s()
{
  {
    init_simple_test("L_BFu15ll_BFu8s");
    static STRUCT_IF_C L_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu8s, L_BFu15ll_BFu8s)
//============================================================================


struct  L_BFu15ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 L_BFu15ll_BFu9i) C1{ FL FL:15 Fi:9}



static void Test_L_BFu15ll_BFu9i()
{
  {
    init_simple_test("L_BFu15ll_BFu9i");
    static STRUCT_IF_C L_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu9i, L_BFu15ll_BFu9i)
//============================================================================


struct  L_BFu15ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 L_BFu15ll_BFu9ll) C1{ FL FL:15 FL:9}



static void Test_L_BFu15ll_BFu9ll()
{
  {
    init_simple_test("L_BFu15ll_BFu9ll");
    static STRUCT_IF_C L_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu9ll, L_BFu15ll_BFu9ll)
//============================================================================


struct  L_BFu15ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 L_BFu15ll_BFu9s) C1{ FL FL:15 Fs:9}



static void Test_L_BFu15ll_BFu9s()
{
  {
    init_simple_test("L_BFu15ll_BFu9s");
    static STRUCT_IF_C L_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu9s, L_BFu15ll_BFu9s)
//============================================================================


struct  L_BFu15ll_C  {
  __tsi64 v1;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 L_BFu15ll_C) C1{ FL FL:15 Fc}



static void Test_L_BFu15ll_C()
{
  {
    init_simple_test("L_BFu15ll_C");
    static STRUCT_IF_C L_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_C");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_C");
    check_field_offset(lv, v3, 10, "L_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_C, L_BFu15ll_C)
//============================================================================


struct  L_BFu15ll_D  {
  __tsi64 v1;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 L_BFu15ll_D) C1{ FL FL:15 FL}



static void Test_L_BFu15ll_D()
{
  {
    init_simple_test("L_BFu15ll_D");
    static STRUCT_IF_C L_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_D");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_D, L_BFu15ll_D)
//============================================================================


struct  L_BFu15ll_F  {
  __tsi64 v1;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 L_BFu15ll_F) C1{ FL FL:15 Fi}



static void Test_L_BFu15ll_F()
{
  {
    init_simple_test("L_BFu15ll_F");
    static STRUCT_IF_C L_BFu15ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_F");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_F");
    check_field_offset(lv, v3, 12, "L_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_F, L_BFu15ll_F)
//============================================================================


struct  L_BFu15ll_I  {
  __tsi64 v1;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 L_BFu15ll_I) C1{ FL FL:15 Fi}



static void Test_L_BFu15ll_I()
{
  {
    init_simple_test("L_BFu15ll_I");
    static STRUCT_IF_C L_BFu15ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_I");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_I");
    check_field_offset(lv, v3, 12, "L_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_I, L_BFu15ll_I)
//============================================================================


struct  L_BFu15ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 L_BFu15ll_Ip) C1{ FL FL:15 Fp}



static void Test_L_BFu15ll_Ip()
{
  {
    init_simple_test("L_BFu15ll_Ip");
    static STRUCT_IF_C L_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Ip, L_BFu15ll_Ip)
//============================================================================


struct  L_BFu15ll_L  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 L_BFu15ll_L) C1{ FL FL:15 FL}



static void Test_L_BFu15ll_L()
{
  {
    init_simple_test("L_BFu15ll_L");
    static STRUCT_IF_C L_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_L");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_L, L_BFu15ll_L)
//============================================================================


struct  L_BFu15ll_S  {
  __tsi64 v1;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 L_BFu15ll_S) C1{ FL FL:15 Fs}



static void Test_L_BFu15ll_S()
{
  {
    init_simple_test("L_BFu15ll_S");
    static STRUCT_IF_C L_BFu15ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_S");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_S");
    check_field_offset(lv, v3, 10, "L_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_S, L_BFu15ll_S)
//============================================================================


struct  L_BFu15ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 L_BFu15ll_Uc) C1{ FL FL:15 Fc}



static void Test_L_BFu15ll_Uc()
{
  {
    init_simple_test("L_BFu15ll_Uc");
    static STRUCT_IF_C L_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Uc");
    check_field_offset(lv, v3, 10, "L_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Uc, L_BFu15ll_Uc)
//============================================================================


struct  L_BFu15ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 L_BFu15ll_Ui) C1{ FL FL:15 Fi}



static void Test_L_BFu15ll_Ui()
{
  {
    init_simple_test("L_BFu15ll_Ui");
    static STRUCT_IF_C L_BFu15ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Ui, L_BFu15ll_Ui)
//============================================================================


struct  L_BFu15ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 L_BFu15ll_Ul) C1{ FL FL:15 FL}



static void Test_L_BFu15ll_Ul()
{
  {
    init_simple_test("L_BFu15ll_Ul");
    static STRUCT_IF_C L_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Ul, L_BFu15ll_Ul)
//============================================================================


struct  L_BFu15ll_Us  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 L_BFu15ll_Us) C1{ FL FL:15 Fs}



static void Test_L_BFu15ll_Us()
{
  {
    init_simple_test("L_BFu15ll_Us");
    static STRUCT_IF_C L_BFu15ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Us, L_BFu15ll_Us)
//============================================================================


struct  L_BFu15ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 L_BFu15ll_Vp) C1{ FL FL:15 Fp}



static void Test_L_BFu15ll_Vp()
{
  {
    init_simple_test("L_BFu15ll_Vp");
    static STRUCT_IF_C L_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_Vp, L_BFu15ll_Vp)
//============================================================================


struct  L_BFu15s  {
  __tsi64 v1;
  unsigned short v2:15;
};
//SIG(1 L_BFu15s) C1{ FL Fs:15}



static void Test_L_BFu15s()
{
  {
    init_simple_test("L_BFu15s");
    static STRUCT_IF_C L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s, L_BFu15s)
//============================================================================


struct  L_BFu15s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 L_BFu15s_BFu15i) C1{ FL Fs:15 Fi:15}



static void Test_L_BFu15s_BFu15i()
{
  {
    init_simple_test("L_BFu15s_BFu15i");
    static STRUCT_IF_C L_BFu15s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu15i, L_BFu15s_BFu15i)
//============================================================================


struct  L_BFu15s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 L_BFu15s_BFu15ll) C1{ FL Fs:15 FL:15}



static void Test_L_BFu15s_BFu15ll()
{
  {
    init_simple_test("L_BFu15s_BFu15ll");
    static STRUCT_IF_C L_BFu15s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, 1, "L_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 7, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu15ll, L_BFu15s_BFu15ll)
//============================================================================


struct  L_BFu15s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 L_BFu15s_BFu15s) C1{ FL Fs:15 Fs:15}



static void Test_L_BFu15s_BFu15s()
{
  {
    init_simple_test("L_BFu15s_BFu15s");
    static STRUCT_IF_C L_BFu15s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu15s, L_BFu15s_BFu15s)
//============================================================================


struct  L_BFu15s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 L_BFu15s_BFu16i) C1{ FL Fs:15 Fi:16}



static void Test_L_BFu15s_BFu16i()
{
  {
    init_simple_test("L_BFu15s_BFu16i");
    static STRUCT_IF_C L_BFu15s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu16i, L_BFu15s_BFu16i)
//============================================================================


struct  L_BFu15s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 L_BFu15s_BFu16ll) C1{ FL Fs:15 FL:16}



static void Test_L_BFu15s_BFu16ll()
{
  {
    init_simple_test("L_BFu15s_BFu16ll");
    static STRUCT_IF_C L_BFu15s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, 1, "L_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 7, 16, hide_ull(1LL<<15), "L_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu16ll, L_BFu15s_BFu16ll)
//============================================================================


struct  L_BFu15s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 L_BFu15s_BFu16s) C1{ FL Fs:15 Fs:16}



static void Test_L_BFu15s_BFu16s()
{
  {
    init_simple_test("L_BFu15s_BFu16s");
    static STRUCT_IF_C L_BFu15s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu16s, L_BFu15s_BFu16s)
//============================================================================


struct  L_BFu15s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 L_BFu15s_BFu17i) C1{ FL Fs:15 Fi:17}



static void Test_L_BFu15s_BFu17i()
{
  {
    init_simple_test("L_BFu15s_BFu17i");
    static STRUCT_IF_C L_BFu15s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu17i, L_BFu15s_BFu17i)
//============================================================================


struct  L_BFu15s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 L_BFu15s_BFu17ll) C1{ FL Fs:15 FL:17}



static void Test_L_BFu15s_BFu17ll()
{
  {
    init_simple_test("L_BFu15s_BFu17ll");
    static STRUCT_IF_C L_BFu15s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, 1, "L_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 7, 17, hide_ull(1LL<<16), "L_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu17ll, L_BFu15s_BFu17ll)
//============================================================================


struct  L_BFu15s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 L_BFu15s_BFu1c) C1{ FL Fs:15 Fc:1}



static void Test_L_BFu15s_BFu1c()
{
  {
    init_simple_test("L_BFu15s_BFu1c");
    static STRUCT_IF_C L_BFu15s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu1c, L_BFu15s_BFu1c)
//============================================================================


struct  L_BFu15s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 L_BFu15s_BFu1i) C1{ FL Fs:15 Fi:1}



static void Test_L_BFu15s_BFu1i()
{
  {
    init_simple_test("L_BFu15s_BFu1i");
    static STRUCT_IF_C L_BFu15s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu1i, L_BFu15s_BFu1i)
//============================================================================


struct  L_BFu15s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 L_BFu15s_BFu1ll) C1{ FL Fs:15 FL:1}



static void Test_L_BFu15s_BFu1ll()
{
  {
    init_simple_test("L_BFu15s_BFu1ll");
    static STRUCT_IF_C L_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu1ll, L_BFu15s_BFu1ll)
//============================================================================


struct  L_BFu15s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 L_BFu15s_BFu1s) C1{ FL Fs:15 Fs:1}



static void Test_L_BFu15s_BFu1s()
{
  {
    init_simple_test("L_BFu15s_BFu1s");
    static STRUCT_IF_C L_BFu15s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 9, 7, 1, 1, "L_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu1s, L_BFu15s_BFu1s)
//============================================================================


struct  L_BFu15s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 L_BFu15s_BFu31i) C1{ FL Fs:15 Fi:31}



static void Test_L_BFu15s_BFu31i()
{
  {
    init_simple_test("L_BFu15s_BFu31i");
    static STRUCT_IF_C L_BFu15s_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu31i, L_BFu15s_BFu31i)
//============================================================================


struct  L_BFu15s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 L_BFu15s_BFu31ll) C1{ FL Fs:15 FL:31}



static void Test_L_BFu15s_BFu31ll()
{
  {
    init_simple_test("L_BFu15s_BFu31ll");
    static STRUCT_IF_C L_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, 1, "L_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 7, 31, hide_ull(1LL<<30), "L_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu31ll, L_BFu15s_BFu31ll)
//============================================================================


struct  L_BFu15s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 L_BFu15s_BFu32i) C1{ FL Fs:15 Fi:32}



static void Test_L_BFu15s_BFu32i()
{
  {
    init_simple_test("L_BFu15s_BFu32i");
    static STRUCT_IF_C L_BFu15s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu32i, L_BFu15s_BFu32i)
//============================================================================


struct  L_BFu15s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 L_BFu15s_BFu32ll) C1{ FL Fs:15 FL:32}



static void Test_L_BFu15s_BFu32ll()
{
  {
    init_simple_test("L_BFu15s_BFu32ll");
    static STRUCT_IF_C L_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, 1, "L_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 7, 32, hide_ull(1LL<<31), "L_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu32ll, L_BFu15s_BFu32ll)
//============================================================================


struct  L_BFu15s_BFu33  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 L_BFu15s_BFu33) C1{ FL Fs:15 FL:33}



static void Test_L_BFu15s_BFu33()
{
  {
    init_simple_test("L_BFu15s_BFu33");
    static STRUCT_IF_C L_BFu15s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, 1, "L_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 9, 7, 33, hide_ull(1LL<<32), "L_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu33, L_BFu15s_BFu33)
//============================================================================


struct  L_BFu15s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 L_BFu15s_BFu7c) C1{ FL Fs:15 Fc:7}



static void Test_L_BFu15s_BFu7c()
{
  {
    init_simple_test("L_BFu15s_BFu7c");
    static STRUCT_IF_C L_BFu15s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu7c, L_BFu15s_BFu7c)
//============================================================================


struct  L_BFu15s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 L_BFu15s_BFu7i) C1{ FL Fs:15 Fi:7}



static void Test_L_BFu15s_BFu7i()
{
  {
    init_simple_test("L_BFu15s_BFu7i");
    static STRUCT_IF_C L_BFu15s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu7i, L_BFu15s_BFu7i)
//============================================================================


struct  L_BFu15s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 L_BFu15s_BFu7ll) C1{ FL Fs:15 FL:7}



static void Test_L_BFu15s_BFu7ll()
{
  {
    init_simple_test("L_BFu15s_BFu7ll");
    static STRUCT_IF_C L_BFu15s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, 1, "L_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 7, 7, hide_ull(1LL<<6), "L_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu7ll, L_BFu15s_BFu7ll)
//============================================================================


struct  L_BFu15s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 L_BFu15s_BFu7s) C1{ FL Fs:15 Fs:7}



static void Test_L_BFu15s_BFu7s()
{
  {
    init_simple_test("L_BFu15s_BFu7s");
    static STRUCT_IF_C L_BFu15s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu7s, L_BFu15s_BFu7s)
//============================================================================


struct  L_BFu15s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 L_BFu15s_BFu8c) C1{ FL Fs:15 Fc:8}



static void Test_L_BFu15s_BFu8c()
{
  {
    init_simple_test("L_BFu15s_BFu8c");
    static STRUCT_IF_C L_BFu15s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu8c, L_BFu15s_BFu8c)
//============================================================================


struct  L_BFu15s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 L_BFu15s_BFu8i) C1{ FL Fs:15 Fi:8}



static void Test_L_BFu15s_BFu8i()
{
  {
    init_simple_test("L_BFu15s_BFu8i");
    static STRUCT_IF_C L_BFu15s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu8i, L_BFu15s_BFu8i)
//============================================================================


struct  L_BFu15s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 L_BFu15s_BFu8ll) C1{ FL Fs:15 FL:8}



static void Test_L_BFu15s_BFu8ll()
{
  {
    init_simple_test("L_BFu15s_BFu8ll");
    static STRUCT_IF_C L_BFu15s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, 1, "L_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 7, 8, hide_ull(1LL<<7), "L_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu8ll, L_BFu15s_BFu8ll)
//============================================================================


struct  L_BFu15s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 L_BFu15s_BFu8s) C1{ FL Fs:15 Fs:8}



static void Test_L_BFu15s_BFu8s()
{
  {
    init_simple_test("L_BFu15s_BFu8s");
    static STRUCT_IF_C L_BFu15s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu8s, L_BFu15s_BFu8s)
//============================================================================


struct  L_BFu15s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 L_BFu15s_BFu9i) C1{ FL Fs:15 Fi:9}



static void Test_L_BFu15s_BFu9i()
{
  {
    init_simple_test("L_BFu15s_BFu9i");
    static STRUCT_IF_C L_BFu15s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu9i, L_BFu15s_BFu9i)
//============================================================================


struct  L_BFu15s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 L_BFu15s_BFu9ll) C1{ FL Fs:15 FL:9}



static void Test_L_BFu15s_BFu9ll()
{
  {
    init_simple_test("L_BFu15s_BFu9ll");
    static STRUCT_IF_C L_BFu15s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, 1, "L_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 7, 9, hide_ull(1LL<<8), "L_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu9ll, L_BFu15s_BFu9ll)
//============================================================================


struct  L_BFu15s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 L_BFu15s_BFu9s) C1{ FL Fs:15 Fs:9}



static void Test_L_BFu15s_BFu9s()
{
  {
    init_simple_test("L_BFu15s_BFu9s");
    static STRUCT_IF_C L_BFu15s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu9s, L_BFu15s_BFu9s)
//============================================================================


struct  L_BFu15s_C  {
  __tsi64 v1;
  unsigned short v2:15;
  char v3;
};
//SIG(1 L_BFu15s_C) C1{ FL Fs:15 Fc}



static void Test_L_BFu15s_C()
{
  {
    init_simple_test("L_BFu15s_C");
    static STRUCT_IF_C L_BFu15s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_C)");
    check_field_offset(lv, v1, 0, "L_BFu15s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_C");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_C");
    check_field_offset(lv, v3, 10, "L_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_C, L_BFu15s_C)
//============================================================================


struct  L_BFu15s_D  {
  __tsi64 v1;
  unsigned short v2:15;
  double v3;
};
//SIG(1 L_BFu15s_D) C1{ FL Fs:15 FL}



static void Test_L_BFu15s_D()
{
  {
    init_simple_test("L_BFu15s_D");
    static STRUCT_IF_C L_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_D)");
    check_field_offset(lv, v1, 0, "L_BFu15s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_D");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_D, L_BFu15s_D)
//============================================================================


struct  L_BFu15s_F  {
  __tsi64 v1;
  unsigned short v2:15;
  float v3;
};
//SIG(1 L_BFu15s_F) C1{ FL Fs:15 Fi}



static void Test_L_BFu15s_F()
{
  {
    init_simple_test("L_BFu15s_F");
    static STRUCT_IF_C L_BFu15s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_F)");
    check_field_offset(lv, v1, 0, "L_BFu15s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_F");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_F");
    check_field_offset(lv, v3, 12, "L_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_F, L_BFu15s_F)
//============================================================================


struct  L_BFu15s_I  {
  __tsi64 v1;
  unsigned short v2:15;
  int v3;
};
//SIG(1 L_BFu15s_I) C1{ FL Fs:15 Fi}



static void Test_L_BFu15s_I()
{
  {
    init_simple_test("L_BFu15s_I");
    static STRUCT_IF_C L_BFu15s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_I)");
    check_field_offset(lv, v1, 0, "L_BFu15s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_I");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_I");
    check_field_offset(lv, v3, 12, "L_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_I, L_BFu15s_I)
//============================================================================


struct  L_BFu15s_Ip  {
  __tsi64 v1;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 L_BFu15s_Ip) C1{ FL Fs:15 Fp}



static void Test_L_BFu15s_Ip()
{
  {
    init_simple_test("L_BFu15s_Ip");
    static STRUCT_IF_C L_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Ip");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Ip, L_BFu15s_Ip)
//============================================================================


struct  L_BFu15s_L  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 L_BFu15s_L) C1{ FL Fs:15 FL}



static void Test_L_BFu15s_L()
{
  {
    init_simple_test("L_BFu15s_L");
    static STRUCT_IF_C L_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_L)");
    check_field_offset(lv, v1, 0, "L_BFu15s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_L");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_L, L_BFu15s_L)
//============================================================================


struct  L_BFu15s_S  {
  __tsi64 v1;
  unsigned short v2:15;
  short v3;
};
//SIG(1 L_BFu15s_S) C1{ FL Fs:15 Fs}



static void Test_L_BFu15s_S()
{
  {
    init_simple_test("L_BFu15s_S");
    static STRUCT_IF_C L_BFu15s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_S)");
    check_field_offset(lv, v1, 0, "L_BFu15s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_S");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_S");
    check_field_offset(lv, v3, 10, "L_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_S, L_BFu15s_S)
//============================================================================


struct  L_BFu15s_Uc  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 L_BFu15s_Uc) C1{ FL Fs:15 Fc}



static void Test_L_BFu15s_Uc()
{
  {
    init_simple_test("L_BFu15s_Uc");
    static STRUCT_IF_C L_BFu15s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Uc");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Uc");
    check_field_offset(lv, v3, 10, "L_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Uc, L_BFu15s_Uc)
//============================================================================


struct  L_BFu15s_Ui  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 L_BFu15s_Ui) C1{ FL Fs:15 Fi}



static void Test_L_BFu15s_Ui()
{
  {
    init_simple_test("L_BFu15s_Ui");
    static STRUCT_IF_C L_BFu15s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu15s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Ui");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Ui, L_BFu15s_Ui)
//============================================================================


struct  L_BFu15s_Ul  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 L_BFu15s_Ul) C1{ FL Fs:15 FL}



static void Test_L_BFu15s_Ul()
{
  {
    init_simple_test("L_BFu15s_Ul");
    static STRUCT_IF_C L_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Ul");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Ul, L_BFu15s_Ul)
//============================================================================


struct  L_BFu15s_Us  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 L_BFu15s_Us) C1{ FL Fs:15 Fs}



static void Test_L_BFu15s_Us()
{
  {
    init_simple_test("L_BFu15s_Us");
    static STRUCT_IF_C L_BFu15s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Us");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Us");
    check_field_offset(lv, v3, 10, "L_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Us, L_BFu15s_Us)
//============================================================================


struct  L_BFu15s_Vp  {
  __tsi64 v1;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 L_BFu15s_Vp) C1{ FL Fs:15 Fp}



static void Test_L_BFu15s_Vp()
{
  {
    init_simple_test("L_BFu15s_Vp");
    static STRUCT_IF_C L_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu15s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_Vp");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_Vp, L_BFu15s_Vp)
//============================================================================


struct  L_BFu16i  {
  __tsi64 v1;
  unsigned int v2:16;
};
//SIG(1 L_BFu16i) C1{ FL Fi:16}



static void Test_L_BFu16i()
{
  {
    init_simple_test("L_BFu16i");
    static STRUCT_IF_C L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i, L_BFu16i)
//============================================================================


struct  L_BFu16i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 L_BFu16i_BFu15i) C1{ FL Fi:16 Fi:15}



static void Test_L_BFu16i_BFu15i()
{
  {
    init_simple_test("L_BFu16i_BFu15i");
    static STRUCT_IF_C L_BFu16i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu15i, L_BFu16i_BFu15i)
//============================================================================


struct  L_BFu16i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 L_BFu16i_BFu15ll) C1{ FL Fi:16 FL:15}



static void Test_L_BFu16i_BFu15ll()
{
  {
    init_simple_test("L_BFu16i_BFu15ll");
    static STRUCT_IF_C L_BFu16i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu15ll, L_BFu16i_BFu15ll)
//============================================================================


struct  L_BFu16i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 L_BFu16i_BFu15s) C1{ FL Fi:16 Fs:15}



static void Test_L_BFu16i_BFu15s()
{
  {
    init_simple_test("L_BFu16i_BFu15s");
    static STRUCT_IF_C L_BFu16i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu15s, L_BFu16i_BFu15s)
//============================================================================


struct  L_BFu16i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 L_BFu16i_BFu16i) C1{ FL Fi:16 Fi:16}



static void Test_L_BFu16i_BFu16i()
{
  {
    init_simple_test("L_BFu16i_BFu16i");
    static STRUCT_IF_C L_BFu16i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu16i, L_BFu16i_BFu16i)
//============================================================================


struct  L_BFu16i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 L_BFu16i_BFu16ll) C1{ FL Fi:16 FL:16}



static void Test_L_BFu16i_BFu16ll()
{
  {
    init_simple_test("L_BFu16i_BFu16ll");
    static STRUCT_IF_C L_BFu16i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu16ll, L_BFu16i_BFu16ll)
//============================================================================


struct  L_BFu16i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 L_BFu16i_BFu16s) C1{ FL Fi:16 Fs:16}



static void Test_L_BFu16i_BFu16s()
{
  {
    init_simple_test("L_BFu16i_BFu16s");
    static STRUCT_IF_C L_BFu16i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu16s, L_BFu16i_BFu16s)
//============================================================================


struct  L_BFu16i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 L_BFu16i_BFu17i) C1{ FL Fi:16 Fi:17}



static void Test_L_BFu16i_BFu17i()
{
  {
    init_simple_test("L_BFu16i_BFu17i");
    static STRUCT_IF_C L_BFu16i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu17i, L_BFu16i_BFu17i)
//============================================================================


struct  L_BFu16i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 L_BFu16i_BFu17ll) C1{ FL Fi:16 FL:17}



static void Test_L_BFu16i_BFu17ll()
{
  {
    init_simple_test("L_BFu16i_BFu17ll");
    static STRUCT_IF_C L_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, 1, "L_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, hide_ull(1LL<<16), "L_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu17ll, L_BFu16i_BFu17ll)
//============================================================================


struct  L_BFu16i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 L_BFu16i_BFu1c) C1{ FL Fi:16 Fc:1}



static void Test_L_BFu16i_BFu1c()
{
  {
    init_simple_test("L_BFu16i_BFu1c");
    static STRUCT_IF_C L_BFu16i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu1c, L_BFu16i_BFu1c)
//============================================================================


struct  L_BFu16i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 L_BFu16i_BFu1i) C1{ FL Fi:16 Fi:1}



static void Test_L_BFu16i_BFu1i()
{
  {
    init_simple_test("L_BFu16i_BFu1i");
    static STRUCT_IF_C L_BFu16i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu1i, L_BFu16i_BFu1i)
//============================================================================


struct  L_BFu16i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 L_BFu16i_BFu1ll) C1{ FL Fi:16 FL:1}



static void Test_L_BFu16i_BFu1ll()
{
  {
    init_simple_test("L_BFu16i_BFu1ll");
    static STRUCT_IF_C L_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu1ll, L_BFu16i_BFu1ll)
//============================================================================


struct  L_BFu16i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 L_BFu16i_BFu1s) C1{ FL Fi:16 Fs:1}



static void Test_L_BFu16i_BFu1s()
{
  {
    init_simple_test("L_BFu16i_BFu1s");
    static STRUCT_IF_C L_BFu16i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu1s, L_BFu16i_BFu1s)
//============================================================================


struct  L_BFu16i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 L_BFu16i_BFu31i) C1{ FL Fi:16 Fi:31}



static void Test_L_BFu16i_BFu31i()
{
  {
    init_simple_test("L_BFu16i_BFu31i");
    static STRUCT_IF_C L_BFu16i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu31i, L_BFu16i_BFu31i)
//============================================================================


struct  L_BFu16i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 L_BFu16i_BFu31ll) C1{ FL Fi:16 FL:31}



static void Test_L_BFu16i_BFu31ll()
{
  {
    init_simple_test("L_BFu16i_BFu31ll");
    static STRUCT_IF_C L_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, 1, "L_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, hide_ull(1LL<<30), "L_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu31ll, L_BFu16i_BFu31ll)
//============================================================================


struct  L_BFu16i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 L_BFu16i_BFu32i) C1{ FL Fi:16 Fi:32}



static void Test_L_BFu16i_BFu32i()
{
  {
    init_simple_test("L_BFu16i_BFu32i");
    static STRUCT_IF_C L_BFu16i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu32i, L_BFu16i_BFu32i)
//============================================================================


struct  L_BFu16i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 L_BFu16i_BFu32ll) C1{ FL Fi:16 FL:32}



static void Test_L_BFu16i_BFu32ll()
{
  {
    init_simple_test("L_BFu16i_BFu32ll");
    static STRUCT_IF_C L_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, 1, "L_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, hide_ull(1LL<<31), "L_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu32ll, L_BFu16i_BFu32ll)
//============================================================================


struct  L_BFu16i_BFu33  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 L_BFu16i_BFu33) C1{ FL Fi:16 FL:33}



static void Test_L_BFu16i_BFu33()
{
  {
    init_simple_test("L_BFu16i_BFu33");
    static STRUCT_IF_C L_BFu16i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, 1, "L_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, hide_ull(1LL<<32), "L_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu33, L_BFu16i_BFu33)
//============================================================================


struct  L_BFu16i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 L_BFu16i_BFu7c) C1{ FL Fi:16 Fc:7}



static void Test_L_BFu16i_BFu7c()
{
  {
    init_simple_test("L_BFu16i_BFu7c");
    static STRUCT_IF_C L_BFu16i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu7c, L_BFu16i_BFu7c)
//============================================================================


struct  L_BFu16i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 L_BFu16i_BFu7i) C1{ FL Fi:16 Fi:7}



static void Test_L_BFu16i_BFu7i()
{
  {
    init_simple_test("L_BFu16i_BFu7i");
    static STRUCT_IF_C L_BFu16i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu7i, L_BFu16i_BFu7i)
//============================================================================


struct  L_BFu16i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 L_BFu16i_BFu7ll) C1{ FL Fi:16 FL:7}



static void Test_L_BFu16i_BFu7ll()
{
  {
    init_simple_test("L_BFu16i_BFu7ll");
    static STRUCT_IF_C L_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu7ll, L_BFu16i_BFu7ll)
//============================================================================


struct  L_BFu16i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 L_BFu16i_BFu7s) C1{ FL Fi:16 Fs:7}



static void Test_L_BFu16i_BFu7s()
{
  {
    init_simple_test("L_BFu16i_BFu7s");
    static STRUCT_IF_C L_BFu16i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu7s, L_BFu16i_BFu7s)
//============================================================================


struct  L_BFu16i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 L_BFu16i_BFu8c) C1{ FL Fi:16 Fc:8}



static void Test_L_BFu16i_BFu8c()
{
  {
    init_simple_test("L_BFu16i_BFu8c");
    static STRUCT_IF_C L_BFu16i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu8c, L_BFu16i_BFu8c)
//============================================================================


struct  L_BFu16i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 L_BFu16i_BFu8i) C1{ FL Fi:16 Fi:8}



static void Test_L_BFu16i_BFu8i()
{
  {
    init_simple_test("L_BFu16i_BFu8i");
    static STRUCT_IF_C L_BFu16i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu8i, L_BFu16i_BFu8i)
//============================================================================


struct  L_BFu16i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 L_BFu16i_BFu8ll) C1{ FL Fi:16 FL:8}



static void Test_L_BFu16i_BFu8ll()
{
  {
    init_simple_test("L_BFu16i_BFu8ll");
    static STRUCT_IF_C L_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu8ll, L_BFu16i_BFu8ll)
//============================================================================


struct  L_BFu16i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 L_BFu16i_BFu8s) C1{ FL Fi:16 Fs:8}



static void Test_L_BFu16i_BFu8s()
{
  {
    init_simple_test("L_BFu16i_BFu8s");
    static STRUCT_IF_C L_BFu16i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu8s, L_BFu16i_BFu8s)
//============================================================================


struct  L_BFu16i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 L_BFu16i_BFu9i) C1{ FL Fi:16 Fi:9}



static void Test_L_BFu16i_BFu9i()
{
  {
    init_simple_test("L_BFu16i_BFu9i");
    static STRUCT_IF_C L_BFu16i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu9i, L_BFu16i_BFu9i)
//============================================================================


struct  L_BFu16i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 L_BFu16i_BFu9ll) C1{ FL Fi:16 FL:9}



static void Test_L_BFu16i_BFu9ll()
{
  {
    init_simple_test("L_BFu16i_BFu9ll");
    static STRUCT_IF_C L_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu9ll, L_BFu16i_BFu9ll)
//============================================================================


struct  L_BFu16i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 L_BFu16i_BFu9s) C1{ FL Fi:16 Fs:9}



static void Test_L_BFu16i_BFu9s()
{
  {
    init_simple_test("L_BFu16i_BFu9s");
    static STRUCT_IF_C L_BFu16i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu9s, L_BFu16i_BFu9s)
//============================================================================


struct  L_BFu16i_C  {
  __tsi64 v1;
  unsigned int v2:16;
  char v3;
};
//SIG(1 L_BFu16i_C) C1{ FL Fi:16 Fc}



static void Test_L_BFu16i_C()
{
  {
    init_simple_test("L_BFu16i_C");
    static STRUCT_IF_C L_BFu16i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_C)");
    check_field_offset(lv, v1, 0, "L_BFu16i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_C");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_C");
    check_field_offset(lv, v3, 10, "L_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_C, L_BFu16i_C)
//============================================================================


struct  L_BFu16i_D  {
  __tsi64 v1;
  unsigned int v2:16;
  double v3;
};
//SIG(1 L_BFu16i_D) C1{ FL Fi:16 FL}



static void Test_L_BFu16i_D()
{
  {
    init_simple_test("L_BFu16i_D");
    static STRUCT_IF_C L_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_D)");
    check_field_offset(lv, v1, 0, "L_BFu16i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_D");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_D, L_BFu16i_D)
//============================================================================


struct  L_BFu16i_F  {
  __tsi64 v1;
  unsigned int v2:16;
  float v3;
};
//SIG(1 L_BFu16i_F) C1{ FL Fi:16 Fi}



static void Test_L_BFu16i_F()
{
  {
    init_simple_test("L_BFu16i_F");
    static STRUCT_IF_C L_BFu16i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_F)");
    check_field_offset(lv, v1, 0, "L_BFu16i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_F");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_F");
    check_field_offset(lv, v3, 12, "L_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_F, L_BFu16i_F)
//============================================================================


struct  L_BFu16i_I  {
  __tsi64 v1;
  unsigned int v2:16;
  int v3;
};
//SIG(1 L_BFu16i_I) C1{ FL Fi:16 Fi}



static void Test_L_BFu16i_I()
{
  {
    init_simple_test("L_BFu16i_I");
    static STRUCT_IF_C L_BFu16i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_I)");
    check_field_offset(lv, v1, 0, "L_BFu16i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_I");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_I");
    check_field_offset(lv, v3, 12, "L_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_I, L_BFu16i_I)
//============================================================================


struct  L_BFu16i_Ip  {
  __tsi64 v1;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 L_BFu16i_Ip) C1{ FL Fi:16 Fp}



static void Test_L_BFu16i_Ip()
{
  {
    init_simple_test("L_BFu16i_Ip");
    static STRUCT_IF_C L_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Ip, L_BFu16i_Ip)
//============================================================================


struct  L_BFu16i_L  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 L_BFu16i_L) C1{ FL Fi:16 FL}



static void Test_L_BFu16i_L()
{
  {
    init_simple_test("L_BFu16i_L");
    static STRUCT_IF_C L_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_L)");
    check_field_offset(lv, v1, 0, "L_BFu16i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_L");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_L, L_BFu16i_L)
//============================================================================


struct  L_BFu16i_S  {
  __tsi64 v1;
  unsigned int v2:16;
  short v3;
};
//SIG(1 L_BFu16i_S) C1{ FL Fi:16 Fs}



static void Test_L_BFu16i_S()
{
  {
    init_simple_test("L_BFu16i_S");
    static STRUCT_IF_C L_BFu16i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_S)");
    check_field_offset(lv, v1, 0, "L_BFu16i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_S");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_S");
    check_field_offset(lv, v3, 10, "L_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_S, L_BFu16i_S)
//============================================================================


struct  L_BFu16i_Uc  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 L_BFu16i_Uc) C1{ FL Fi:16 Fc}



static void Test_L_BFu16i_Uc()
{
  {
    init_simple_test("L_BFu16i_Uc");
    static STRUCT_IF_C L_BFu16i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Uc");
    check_field_offset(lv, v3, 10, "L_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Uc, L_BFu16i_Uc)
//============================================================================


struct  L_BFu16i_Ui  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 L_BFu16i_Ui) C1{ FL Fi:16 Fi}



static void Test_L_BFu16i_Ui()
{
  {
    init_simple_test("L_BFu16i_Ui");
    static STRUCT_IF_C L_BFu16i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Ui, L_BFu16i_Ui)
//============================================================================


struct  L_BFu16i_Ul  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 L_BFu16i_Ul) C1{ FL Fi:16 FL}



static void Test_L_BFu16i_Ul()
{
  {
    init_simple_test("L_BFu16i_Ul");
    static STRUCT_IF_C L_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Ul, L_BFu16i_Ul)
//============================================================================


struct  L_BFu16i_Us  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 L_BFu16i_Us) C1{ FL Fi:16 Fs}



static void Test_L_BFu16i_Us()
{
  {
    init_simple_test("L_BFu16i_Us");
    static STRUCT_IF_C L_BFu16i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Us");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Us");
    check_field_offset(lv, v3, 10, "L_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Us, L_BFu16i_Us)
//============================================================================


struct  L_BFu16i_Vp  {
  __tsi64 v1;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 L_BFu16i_Vp) C1{ FL Fi:16 Fp}



static void Test_L_BFu16i_Vp()
{
  {
    init_simple_test("L_BFu16i_Vp");
    static STRUCT_IF_C L_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu16i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_Vp, L_BFu16i_Vp)
//============================================================================


struct  L_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:16;
};
//SIG(1 L_BFu16ll) C1{ FL FL:16}



static void Test_L_BFu16ll()
{
  {
    init_simple_test("L_BFu16ll");
    static STRUCT_IF_C L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll, L_BFu16ll)
//============================================================================


struct  L_BFu16ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 L_BFu16ll_BFu15i) C1{ FL FL:16 Fi:15}



static void Test_L_BFu16ll_BFu15i()
{
  {
    init_simple_test("L_BFu16ll_BFu15i");
    static STRUCT_IF_C L_BFu16ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu15i, L_BFu16ll_BFu15i)
//============================================================================


struct  L_BFu16ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 L_BFu16ll_BFu15ll) C1{ FL FL:16 FL:15}



static void Test_L_BFu16ll_BFu15ll()
{
  {
    init_simple_test("L_BFu16ll_BFu15ll");
    static STRUCT_IF_C L_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu15ll, L_BFu16ll_BFu15ll)
//============================================================================


struct  L_BFu16ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 L_BFu16ll_BFu15s) C1{ FL FL:16 Fs:15}



static void Test_L_BFu16ll_BFu15s()
{
  {
    init_simple_test("L_BFu16ll_BFu15s");
    static STRUCT_IF_C L_BFu16ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu15s, L_BFu16ll_BFu15s)
//============================================================================


struct  L_BFu16ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 L_BFu16ll_BFu16i) C1{ FL FL:16 Fi:16}



static void Test_L_BFu16ll_BFu16i()
{
  {
    init_simple_test("L_BFu16ll_BFu16i");
    static STRUCT_IF_C L_BFu16ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu16i, L_BFu16ll_BFu16i)
//============================================================================


struct  L_BFu16ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 L_BFu16ll_BFu16ll) C1{ FL FL:16 FL:16}



static void Test_L_BFu16ll_BFu16ll()
{
  {
    init_simple_test("L_BFu16ll_BFu16ll");
    static STRUCT_IF_C L_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu16ll, L_BFu16ll_BFu16ll)
//============================================================================


struct  L_BFu16ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 L_BFu16ll_BFu16s) C1{ FL FL:16 Fs:16}



static void Test_L_BFu16ll_BFu16s()
{
  {
    init_simple_test("L_BFu16ll_BFu16s");
    static STRUCT_IF_C L_BFu16ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu16s, L_BFu16ll_BFu16s)
//============================================================================


struct  L_BFu16ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 L_BFu16ll_BFu17i) C1{ FL FL:16 Fi:17}



static void Test_L_BFu16ll_BFu17i()
{
  {
    init_simple_test("L_BFu16ll_BFu17i");
    static STRUCT_IF_C L_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu17i, L_BFu16ll_BFu17i)
//============================================================================


struct  L_BFu16ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 L_BFu16ll_BFu17ll) C1{ FL FL:16 FL:17}



static void Test_L_BFu16ll_BFu17ll()
{
  {
    init_simple_test("L_BFu16ll_BFu17ll");
    static STRUCT_IF_C L_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, 1, "L_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, hide_ull(1LL<<16), "L_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu17ll, L_BFu16ll_BFu17ll)
//============================================================================


struct  L_BFu16ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 L_BFu16ll_BFu1c) C1{ FL FL:16 Fc:1}



static void Test_L_BFu16ll_BFu1c()
{
  {
    init_simple_test("L_BFu16ll_BFu1c");
    static STRUCT_IF_C L_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu1c, L_BFu16ll_BFu1c)
//============================================================================


struct  L_BFu16ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 L_BFu16ll_BFu1i) C1{ FL FL:16 Fi:1}



static void Test_L_BFu16ll_BFu1i()
{
  {
    init_simple_test("L_BFu16ll_BFu1i");
    static STRUCT_IF_C L_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu1i, L_BFu16ll_BFu1i)
//============================================================================


struct  L_BFu16ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 L_BFu16ll_BFu1ll) C1{ FL FL:16 FL:1}



static void Test_L_BFu16ll_BFu1ll()
{
  {
    init_simple_test("L_BFu16ll_BFu1ll");
    static STRUCT_IF_C L_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu1ll, L_BFu16ll_BFu1ll)
//============================================================================


struct  L_BFu16ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 L_BFu16ll_BFu1s) C1{ FL FL:16 Fs:1}



static void Test_L_BFu16ll_BFu1s()
{
  {
    init_simple_test("L_BFu16ll_BFu1s");
    static STRUCT_IF_C L_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu1s, L_BFu16ll_BFu1s)
//============================================================================


struct  L_BFu16ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 L_BFu16ll_BFu31i) C1{ FL FL:16 Fi:31}



static void Test_L_BFu16ll_BFu31i()
{
  {
    init_simple_test("L_BFu16ll_BFu31i");
    static STRUCT_IF_C L_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu31i, L_BFu16ll_BFu31i)
//============================================================================


struct  L_BFu16ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 L_BFu16ll_BFu31ll) C1{ FL FL:16 FL:31}



static void Test_L_BFu16ll_BFu31ll()
{
  {
    init_simple_test("L_BFu16ll_BFu31ll");
    static STRUCT_IF_C L_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, 1, "L_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, hide_ull(1LL<<30), "L_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu31ll, L_BFu16ll_BFu31ll)
//============================================================================


struct  L_BFu16ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 L_BFu16ll_BFu32i) C1{ FL FL:16 Fi:32}



static void Test_L_BFu16ll_BFu32i()
{
  {
    init_simple_test("L_BFu16ll_BFu32i");
    static STRUCT_IF_C L_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu32i, L_BFu16ll_BFu32i)
//============================================================================


struct  L_BFu16ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 L_BFu16ll_BFu32ll) C1{ FL FL:16 FL:32}



static void Test_L_BFu16ll_BFu32ll()
{
  {
    init_simple_test("L_BFu16ll_BFu32ll");
    static STRUCT_IF_C L_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, 1, "L_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, hide_ull(1LL<<31), "L_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu32ll, L_BFu16ll_BFu32ll)
//============================================================================


struct  L_BFu16ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 L_BFu16ll_BFu33) C1{ FL FL:16 FL:33}



static void Test_L_BFu16ll_BFu33()
{
  {
    init_simple_test("L_BFu16ll_BFu33");
    static STRUCT_IF_C L_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, 1, "L_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, hide_ull(1LL<<32), "L_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu33, L_BFu16ll_BFu33)
//============================================================================


struct  L_BFu16ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 L_BFu16ll_BFu7c) C1{ FL FL:16 Fc:7}



static void Test_L_BFu16ll_BFu7c()
{
  {
    init_simple_test("L_BFu16ll_BFu7c");
    static STRUCT_IF_C L_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu7c, L_BFu16ll_BFu7c)
//============================================================================


struct  L_BFu16ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 L_BFu16ll_BFu7i) C1{ FL FL:16 Fi:7}



static void Test_L_BFu16ll_BFu7i()
{
  {
    init_simple_test("L_BFu16ll_BFu7i");
    static STRUCT_IF_C L_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu7i, L_BFu16ll_BFu7i)
//============================================================================


struct  L_BFu16ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 L_BFu16ll_BFu7ll) C1{ FL FL:16 FL:7}



static void Test_L_BFu16ll_BFu7ll()
{
  {
    init_simple_test("L_BFu16ll_BFu7ll");
    static STRUCT_IF_C L_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu7ll, L_BFu16ll_BFu7ll)
//============================================================================


struct  L_BFu16ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 L_BFu16ll_BFu7s) C1{ FL FL:16 Fs:7}



static void Test_L_BFu16ll_BFu7s()
{
  {
    init_simple_test("L_BFu16ll_BFu7s");
    static STRUCT_IF_C L_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu7s, L_BFu16ll_BFu7s)
//============================================================================


struct  L_BFu16ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 L_BFu16ll_BFu8c) C1{ FL FL:16 Fc:8}



static void Test_L_BFu16ll_BFu8c()
{
  {
    init_simple_test("L_BFu16ll_BFu8c");
    static STRUCT_IF_C L_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu8c, L_BFu16ll_BFu8c)
//============================================================================


struct  L_BFu16ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 L_BFu16ll_BFu8i) C1{ FL FL:16 Fi:8}



static void Test_L_BFu16ll_BFu8i()
{
  {
    init_simple_test("L_BFu16ll_BFu8i");
    static STRUCT_IF_C L_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu8i, L_BFu16ll_BFu8i)
//============================================================================


struct  L_BFu16ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 L_BFu16ll_BFu8ll) C1{ FL FL:16 FL:8}



static void Test_L_BFu16ll_BFu8ll()
{
  {
    init_simple_test("L_BFu16ll_BFu8ll");
    static STRUCT_IF_C L_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu8ll, L_BFu16ll_BFu8ll)
//============================================================================


struct  L_BFu16ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 L_BFu16ll_BFu8s) C1{ FL FL:16 Fs:8}



static void Test_L_BFu16ll_BFu8s()
{
  {
    init_simple_test("L_BFu16ll_BFu8s");
    static STRUCT_IF_C L_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu8s, L_BFu16ll_BFu8s)
//============================================================================


struct  L_BFu16ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 L_BFu16ll_BFu9i) C1{ FL FL:16 Fi:9}



static void Test_L_BFu16ll_BFu9i()
{
  {
    init_simple_test("L_BFu16ll_BFu9i");
    static STRUCT_IF_C L_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu9i, L_BFu16ll_BFu9i)
//============================================================================


struct  L_BFu16ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 L_BFu16ll_BFu9ll) C1{ FL FL:16 FL:9}



static void Test_L_BFu16ll_BFu9ll()
{
  {
    init_simple_test("L_BFu16ll_BFu9ll");
    static STRUCT_IF_C L_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu9ll, L_BFu16ll_BFu9ll)
//============================================================================


struct  L_BFu16ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 L_BFu16ll_BFu9s) C1{ FL FL:16 Fs:9}



static void Test_L_BFu16ll_BFu9s()
{
  {
    init_simple_test("L_BFu16ll_BFu9s");
    static STRUCT_IF_C L_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu9s, L_BFu16ll_BFu9s)
//============================================================================


struct  L_BFu16ll_C  {
  __tsi64 v1;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 L_BFu16ll_C) C1{ FL FL:16 Fc}



static void Test_L_BFu16ll_C()
{
  {
    init_simple_test("L_BFu16ll_C");
    static STRUCT_IF_C L_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_C");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_C");
    check_field_offset(lv, v3, 10, "L_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_C, L_BFu16ll_C)
//============================================================================


struct  L_BFu16ll_D  {
  __tsi64 v1;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 L_BFu16ll_D) C1{ FL FL:16 FL}



static void Test_L_BFu16ll_D()
{
  {
    init_simple_test("L_BFu16ll_D");
    static STRUCT_IF_C L_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_D");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_D, L_BFu16ll_D)
//============================================================================


struct  L_BFu16ll_F  {
  __tsi64 v1;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 L_BFu16ll_F) C1{ FL FL:16 Fi}



static void Test_L_BFu16ll_F()
{
  {
    init_simple_test("L_BFu16ll_F");
    static STRUCT_IF_C L_BFu16ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_F");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_F");
    check_field_offset(lv, v3, 12, "L_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_F, L_BFu16ll_F)
//============================================================================


struct  L_BFu16ll_I  {
  __tsi64 v1;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 L_BFu16ll_I) C1{ FL FL:16 Fi}



static void Test_L_BFu16ll_I()
{
  {
    init_simple_test("L_BFu16ll_I");
    static STRUCT_IF_C L_BFu16ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_I");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_I");
    check_field_offset(lv, v3, 12, "L_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_I, L_BFu16ll_I)
//============================================================================


struct  L_BFu16ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 L_BFu16ll_Ip) C1{ FL FL:16 Fp}



static void Test_L_BFu16ll_Ip()
{
  {
    init_simple_test("L_BFu16ll_Ip");
    static STRUCT_IF_C L_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Ip, L_BFu16ll_Ip)
//============================================================================


struct  L_BFu16ll_L  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 L_BFu16ll_L) C1{ FL FL:16 FL}



static void Test_L_BFu16ll_L()
{
  {
    init_simple_test("L_BFu16ll_L");
    static STRUCT_IF_C L_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_L");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_L, L_BFu16ll_L)
//============================================================================


struct  L_BFu16ll_S  {
  __tsi64 v1;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 L_BFu16ll_S) C1{ FL FL:16 Fs}



static void Test_L_BFu16ll_S()
{
  {
    init_simple_test("L_BFu16ll_S");
    static STRUCT_IF_C L_BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_S");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_S");
    check_field_offset(lv, v3, 10, "L_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_S, L_BFu16ll_S)
//============================================================================


struct  L_BFu16ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 L_BFu16ll_Uc) C1{ FL FL:16 Fc}



static void Test_L_BFu16ll_Uc()
{
  {
    init_simple_test("L_BFu16ll_Uc");
    static STRUCT_IF_C L_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Uc");
    check_field_offset(lv, v3, 10, "L_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Uc, L_BFu16ll_Uc)
//============================================================================


struct  L_BFu16ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 L_BFu16ll_Ui) C1{ FL FL:16 Fi}



static void Test_L_BFu16ll_Ui()
{
  {
    init_simple_test("L_BFu16ll_Ui");
    static STRUCT_IF_C L_BFu16ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Ui, L_BFu16ll_Ui)
//============================================================================


struct  L_BFu16ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 L_BFu16ll_Ul) C1{ FL FL:16 FL}



static void Test_L_BFu16ll_Ul()
{
  {
    init_simple_test("L_BFu16ll_Ul");
    static STRUCT_IF_C L_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Ul, L_BFu16ll_Ul)
//============================================================================


struct  L_BFu16ll_Us  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 L_BFu16ll_Us) C1{ FL FL:16 Fs}



static void Test_L_BFu16ll_Us()
{
  {
    init_simple_test("L_BFu16ll_Us");
    static STRUCT_IF_C L_BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Us, L_BFu16ll_Us)
//============================================================================


struct  L_BFu16ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 L_BFu16ll_Vp) C1{ FL FL:16 Fp}



static void Test_L_BFu16ll_Vp()
{
  {
    init_simple_test("L_BFu16ll_Vp");
    static STRUCT_IF_C L_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_Vp, L_BFu16ll_Vp)
//============================================================================


struct  L_BFu16s  {
  __tsi64 v1;
  unsigned short v2:16;
};
//SIG(1 L_BFu16s) C1{ FL Fs:16}



static void Test_L_BFu16s()
{
  {
    init_simple_test("L_BFu16s");
    static STRUCT_IF_C L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s, L_BFu16s)
//============================================================================


struct  L_BFu16s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 L_BFu16s_BFu15i) C1{ FL Fs:16 Fi:15}



static void Test_L_BFu16s_BFu15i()
{
  {
    init_simple_test("L_BFu16s_BFu15i");
    static STRUCT_IF_C L_BFu16s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu15i, L_BFu16s_BFu15i)
//============================================================================


struct  L_BFu16s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 L_BFu16s_BFu15ll) C1{ FL Fs:16 FL:15}



static void Test_L_BFu16s_BFu15ll()
{
  {
    init_simple_test("L_BFu16s_BFu15ll");
    static STRUCT_IF_C L_BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu15ll, L_BFu16s_BFu15ll)
//============================================================================


struct  L_BFu16s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 L_BFu16s_BFu15s) C1{ FL Fs:16 Fs:15}



static void Test_L_BFu16s_BFu15s()
{
  {
    init_simple_test("L_BFu16s_BFu15s");
    static STRUCT_IF_C L_BFu16s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu15s, L_BFu16s_BFu15s)
//============================================================================


struct  L_BFu16s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 L_BFu16s_BFu16i) C1{ FL Fs:16 Fi:16}



static void Test_L_BFu16s_BFu16i()
{
  {
    init_simple_test("L_BFu16s_BFu16i");
    static STRUCT_IF_C L_BFu16s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu16i, L_BFu16s_BFu16i)
//============================================================================


struct  L_BFu16s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 L_BFu16s_BFu16ll) C1{ FL Fs:16 FL:16}



static void Test_L_BFu16s_BFu16ll()
{
  {
    init_simple_test("L_BFu16s_BFu16ll");
    static STRUCT_IF_C L_BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu16ll, L_BFu16s_BFu16ll)
//============================================================================


struct  L_BFu16s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 L_BFu16s_BFu16s) C1{ FL Fs:16 Fs:16}



static void Test_L_BFu16s_BFu16s()
{
  {
    init_simple_test("L_BFu16s_BFu16s");
    static STRUCT_IF_C L_BFu16s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu16s, L_BFu16s_BFu16s)
//============================================================================


struct  L_BFu16s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 L_BFu16s_BFu17i) C1{ FL Fs:16 Fi:17}



static void Test_L_BFu16s_BFu17i()
{
  {
    init_simple_test("L_BFu16s_BFu17i");
    static STRUCT_IF_C L_BFu16s_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu17i, L_BFu16s_BFu17i)
//============================================================================


struct  L_BFu16s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 L_BFu16s_BFu17ll) C1{ FL Fs:16 FL:17}



static void Test_L_BFu16s_BFu17ll()
{
  {
    init_simple_test("L_BFu16s_BFu17ll");
    static STRUCT_IF_C L_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, 1, "L_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, hide_ull(1LL<<16), "L_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu17ll, L_BFu16s_BFu17ll)
//============================================================================


struct  L_BFu16s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 L_BFu16s_BFu1c) C1{ FL Fs:16 Fc:1}



static void Test_L_BFu16s_BFu1c()
{
  {
    init_simple_test("L_BFu16s_BFu1c");
    static STRUCT_IF_C L_BFu16s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu1c, L_BFu16s_BFu1c)
//============================================================================


struct  L_BFu16s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 L_BFu16s_BFu1i) C1{ FL Fs:16 Fi:1}



static void Test_L_BFu16s_BFu1i()
{
  {
    init_simple_test("L_BFu16s_BFu1i");
    static STRUCT_IF_C L_BFu16s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu1i, L_BFu16s_BFu1i)
//============================================================================


struct  L_BFu16s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 L_BFu16s_BFu1ll) C1{ FL Fs:16 FL:1}



static void Test_L_BFu16s_BFu1ll()
{
  {
    init_simple_test("L_BFu16s_BFu1ll");
    static STRUCT_IF_C L_BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu1ll, L_BFu16s_BFu1ll)
//============================================================================


struct  L_BFu16s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 L_BFu16s_BFu1s) C1{ FL Fs:16 Fs:1}



static void Test_L_BFu16s_BFu1s()
{
  {
    init_simple_test("L_BFu16s_BFu1s");
    static STRUCT_IF_C L_BFu16s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu1s, L_BFu16s_BFu1s)
//============================================================================


struct  L_BFu16s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 L_BFu16s_BFu31i) C1{ FL Fs:16 Fi:31}



static void Test_L_BFu16s_BFu31i()
{
  {
    init_simple_test("L_BFu16s_BFu31i");
    static STRUCT_IF_C L_BFu16s_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu31i, L_BFu16s_BFu31i)
//============================================================================


struct  L_BFu16s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 L_BFu16s_BFu31ll) C1{ FL Fs:16 FL:31}



static void Test_L_BFu16s_BFu31ll()
{
  {
    init_simple_test("L_BFu16s_BFu31ll");
    static STRUCT_IF_C L_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, 1, "L_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, hide_ull(1LL<<30), "L_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu31ll, L_BFu16s_BFu31ll)
//============================================================================


struct  L_BFu16s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 L_BFu16s_BFu32i) C1{ FL Fs:16 Fi:32}



static void Test_L_BFu16s_BFu32i()
{
  {
    init_simple_test("L_BFu16s_BFu32i");
    static STRUCT_IF_C L_BFu16s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu32i, L_BFu16s_BFu32i)
//============================================================================


struct  L_BFu16s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 L_BFu16s_BFu32ll) C1{ FL Fs:16 FL:32}



static void Test_L_BFu16s_BFu32ll()
{
  {
    init_simple_test("L_BFu16s_BFu32ll");
    static STRUCT_IF_C L_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, 1, "L_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, hide_ull(1LL<<31), "L_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu32ll, L_BFu16s_BFu32ll)
//============================================================================


struct  L_BFu16s_BFu33  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 L_BFu16s_BFu33) C1{ FL Fs:16 FL:33}



static void Test_L_BFu16s_BFu33()
{
  {
    init_simple_test("L_BFu16s_BFu33");
    static STRUCT_IF_C L_BFu16s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, 1, "L_BFu16s_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, hide_ull(1LL<<32), "L_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu33, L_BFu16s_BFu33)
//============================================================================


struct  L_BFu16s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 L_BFu16s_BFu7c) C1{ FL Fs:16 Fc:7}



static void Test_L_BFu16s_BFu7c()
{
  {
    init_simple_test("L_BFu16s_BFu7c");
    static STRUCT_IF_C L_BFu16s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu7c, L_BFu16s_BFu7c)
//============================================================================


struct  L_BFu16s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 L_BFu16s_BFu7i) C1{ FL Fs:16 Fi:7}



static void Test_L_BFu16s_BFu7i()
{
  {
    init_simple_test("L_BFu16s_BFu7i");
    static STRUCT_IF_C L_BFu16s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu7i, L_BFu16s_BFu7i)
//============================================================================


struct  L_BFu16s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 L_BFu16s_BFu7ll) C1{ FL Fs:16 FL:7}



static void Test_L_BFu16s_BFu7ll()
{
  {
    init_simple_test("L_BFu16s_BFu7ll");
    static STRUCT_IF_C L_BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu7ll, L_BFu16s_BFu7ll)
//============================================================================


struct  L_BFu16s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 L_BFu16s_BFu7s) C1{ FL Fs:16 Fs:7}



static void Test_L_BFu16s_BFu7s()
{
  {
    init_simple_test("L_BFu16s_BFu7s");
    static STRUCT_IF_C L_BFu16s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu7s, L_BFu16s_BFu7s)
//============================================================================


struct  L_BFu16s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 L_BFu16s_BFu8c) C1{ FL Fs:16 Fc:8}



static void Test_L_BFu16s_BFu8c()
{
  {
    init_simple_test("L_BFu16s_BFu8c");
    static STRUCT_IF_C L_BFu16s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu8c, L_BFu16s_BFu8c)
//============================================================================


struct  L_BFu16s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 L_BFu16s_BFu8i) C1{ FL Fs:16 Fi:8}



static void Test_L_BFu16s_BFu8i()
{
  {
    init_simple_test("L_BFu16s_BFu8i");
    static STRUCT_IF_C L_BFu16s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu8i, L_BFu16s_BFu8i)
//============================================================================


struct  L_BFu16s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 L_BFu16s_BFu8ll) C1{ FL Fs:16 FL:8}



static void Test_L_BFu16s_BFu8ll()
{
  {
    init_simple_test("L_BFu16s_BFu8ll");
    static STRUCT_IF_C L_BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu8ll, L_BFu16s_BFu8ll)
//============================================================================


struct  L_BFu16s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 L_BFu16s_BFu8s) C1{ FL Fs:16 Fs:8}



static void Test_L_BFu16s_BFu8s()
{
  {
    init_simple_test("L_BFu16s_BFu8s");
    static STRUCT_IF_C L_BFu16s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu8s, L_BFu16s_BFu8s)
//============================================================================


struct  L_BFu16s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 L_BFu16s_BFu9i) C1{ FL Fs:16 Fi:9}



static void Test_L_BFu16s_BFu9i()
{
  {
    init_simple_test("L_BFu16s_BFu9i");
    static STRUCT_IF_C L_BFu16s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu9i, L_BFu16s_BFu9i)
//============================================================================


struct  L_BFu16s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 L_BFu16s_BFu9ll) C1{ FL Fs:16 FL:9}



static void Test_L_BFu16s_BFu9ll()
{
  {
    init_simple_test("L_BFu16s_BFu9ll");
    static STRUCT_IF_C L_BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu9ll, L_BFu16s_BFu9ll)
//============================================================================


struct  L_BFu16s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 L_BFu16s_BFu9s) C1{ FL Fs:16 Fs:9}



static void Test_L_BFu16s_BFu9s()
{
  {
    init_simple_test("L_BFu16s_BFu9s");
    static STRUCT_IF_C L_BFu16s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu9s, L_BFu16s_BFu9s)
//============================================================================


struct  L_BFu16s_C  {
  __tsi64 v1;
  unsigned short v2:16;
  char v3;
};
//SIG(1 L_BFu16s_C) C1{ FL Fs:16 Fc}



static void Test_L_BFu16s_C()
{
  {
    init_simple_test("L_BFu16s_C");
    static STRUCT_IF_C L_BFu16s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_C)");
    check_field_offset(lv, v1, 0, "L_BFu16s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_C");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_C");
    check_field_offset(lv, v3, 10, "L_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_C, L_BFu16s_C)
//============================================================================


struct  L_BFu16s_D  {
  __tsi64 v1;
  unsigned short v2:16;
  double v3;
};
//SIG(1 L_BFu16s_D) C1{ FL Fs:16 FL}



static void Test_L_BFu16s_D()
{
  {
    init_simple_test("L_BFu16s_D");
    static STRUCT_IF_C L_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_D)");
    check_field_offset(lv, v1, 0, "L_BFu16s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_D");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_D, L_BFu16s_D)
//============================================================================


struct  L_BFu16s_F  {
  __tsi64 v1;
  unsigned short v2:16;
  float v3;
};
//SIG(1 L_BFu16s_F) C1{ FL Fs:16 Fi}



static void Test_L_BFu16s_F()
{
  {
    init_simple_test("L_BFu16s_F");
    static STRUCT_IF_C L_BFu16s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_F)");
    check_field_offset(lv, v1, 0, "L_BFu16s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_F");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_F");
    check_field_offset(lv, v3, 12, "L_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_F, L_BFu16s_F)
//============================================================================


struct  L_BFu16s_I  {
  __tsi64 v1;
  unsigned short v2:16;
  int v3;
};
//SIG(1 L_BFu16s_I) C1{ FL Fs:16 Fi}



static void Test_L_BFu16s_I()
{
  {
    init_simple_test("L_BFu16s_I");
    static STRUCT_IF_C L_BFu16s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_I)");
    check_field_offset(lv, v1, 0, "L_BFu16s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_I");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_I");
    check_field_offset(lv, v3, 12, "L_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_I, L_BFu16s_I)
//============================================================================


struct  L_BFu16s_Ip  {
  __tsi64 v1;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 L_BFu16s_Ip) C1{ FL Fs:16 Fp}



static void Test_L_BFu16s_Ip()
{
  {
    init_simple_test("L_BFu16s_Ip");
    static STRUCT_IF_C L_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Ip");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Ip, L_BFu16s_Ip)
//============================================================================


struct  L_BFu16s_L  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 L_BFu16s_L) C1{ FL Fs:16 FL}



static void Test_L_BFu16s_L()
{
  {
    init_simple_test("L_BFu16s_L");
    static STRUCT_IF_C L_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_L)");
    check_field_offset(lv, v1, 0, "L_BFu16s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_L");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_L, L_BFu16s_L)
//============================================================================


struct  L_BFu16s_S  {
  __tsi64 v1;
  unsigned short v2:16;
  short v3;
};
//SIG(1 L_BFu16s_S) C1{ FL Fs:16 Fs}



static void Test_L_BFu16s_S()
{
  {
    init_simple_test("L_BFu16s_S");
    static STRUCT_IF_C L_BFu16s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_S)");
    check_field_offset(lv, v1, 0, "L_BFu16s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_S");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_S");
    check_field_offset(lv, v3, 10, "L_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_S, L_BFu16s_S)
//============================================================================


struct  L_BFu16s_Uc  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 L_BFu16s_Uc) C1{ FL Fs:16 Fc}



static void Test_L_BFu16s_Uc()
{
  {
    init_simple_test("L_BFu16s_Uc");
    static STRUCT_IF_C L_BFu16s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Uc");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Uc");
    check_field_offset(lv, v3, 10, "L_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Uc, L_BFu16s_Uc)
//============================================================================


struct  L_BFu16s_Ui  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 L_BFu16s_Ui) C1{ FL Fs:16 Fi}



static void Test_L_BFu16s_Ui()
{
  {
    init_simple_test("L_BFu16s_Ui");
    static STRUCT_IF_C L_BFu16s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu16s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Ui");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Ui, L_BFu16s_Ui)
//============================================================================


struct  L_BFu16s_Ul  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 L_BFu16s_Ul) C1{ FL Fs:16 FL}



static void Test_L_BFu16s_Ul()
{
  {
    init_simple_test("L_BFu16s_Ul");
    static STRUCT_IF_C L_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Ul");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Ul, L_BFu16s_Ul)
//============================================================================


struct  L_BFu16s_Us  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 L_BFu16s_Us) C1{ FL Fs:16 Fs}



static void Test_L_BFu16s_Us()
{
  {
    init_simple_test("L_BFu16s_Us");
    static STRUCT_IF_C L_BFu16s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Us");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Us");
    check_field_offset(lv, v3, 10, "L_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Us, L_BFu16s_Us)
//============================================================================


struct  L_BFu16s_Vp  {
  __tsi64 v1;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 L_BFu16s_Vp) C1{ FL Fs:16 Fp}



static void Test_L_BFu16s_Vp()
{
  {
    init_simple_test("L_BFu16s_Vp");
    static STRUCT_IF_C L_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu16s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_Vp");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_Vp, L_BFu16s_Vp)
//============================================================================


struct  L_BFu17i  {
  __tsi64 v1;
  unsigned int v2:17;
};
//SIG(1 L_BFu17i) C1{ FL Fi:17}



static void Test_L_BFu17i()
{
  {
    init_simple_test("L_BFu17i");
    static STRUCT_IF_C L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i, L_BFu17i)
//============================================================================


struct  L_BFu17i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 L_BFu17i_BFu15i) C1{ FL Fi:17 Fi:15}



static void Test_L_BFu17i_BFu15i()
{
  {
    init_simple_test("L_BFu17i_BFu15i");
    static STRUCT_IF_C L_BFu17i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu15i, L_BFu17i_BFu15i)
//============================================================================


struct  L_BFu17i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 L_BFu17i_BFu15ll) C1{ FL Fi:17 FL:15}



static void Test_L_BFu17i_BFu15ll()
{
  {
    init_simple_test("L_BFu17i_BFu15ll");
    static STRUCT_IF_C L_BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu15ll, L_BFu17i_BFu15ll)
//============================================================================


struct  L_BFu17i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 L_BFu17i_BFu15s) C1{ FL Fi:17 Fs:15}



static void Test_L_BFu17i_BFu15s()
{
  {
    init_simple_test("L_BFu17i_BFu15s");
    static STRUCT_IF_C L_BFu17i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu15s, L_BFu17i_BFu15s)
//============================================================================


struct  L_BFu17i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 L_BFu17i_BFu16i) C1{ FL Fi:17 Fi:16}



static void Test_L_BFu17i_BFu16i()
{
  {
    init_simple_test("L_BFu17i_BFu16i");
    static STRUCT_IF_C L_BFu17i_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu16i, L_BFu17i_BFu16i)
//============================================================================


struct  L_BFu17i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 L_BFu17i_BFu16ll) C1{ FL Fi:17 FL:16}



static void Test_L_BFu17i_BFu16ll()
{
  {
    init_simple_test("L_BFu17i_BFu16ll");
    static STRUCT_IF_C L_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 10, 1, 16, 1, "L_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 10, 1, 16, hide_ull(1LL<<15), "L_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu16ll, L_BFu17i_BFu16ll)
//============================================================================


struct  L_BFu17i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 L_BFu17i_BFu16s) C1{ FL Fi:17 Fs:16}



static void Test_L_BFu17i_BFu16s()
{
  {
    init_simple_test("L_BFu17i_BFu16s");
    static STRUCT_IF_C L_BFu17i_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu16s, L_BFu17i_BFu16s)
//============================================================================


struct  L_BFu17i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 L_BFu17i_BFu17i) C1{ FL Fi:17 Fi:17}



static void Test_L_BFu17i_BFu17i()
{
  {
    init_simple_test("L_BFu17i_BFu17i");
    static STRUCT_IF_C L_BFu17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu17i, L_BFu17i_BFu17i)
//============================================================================


struct  L_BFu17i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 L_BFu17i_BFu17ll) C1{ FL Fi:17 FL:17}



static void Test_L_BFu17i_BFu17ll()
{
  {
    init_simple_test("L_BFu17i_BFu17ll");
    static STRUCT_IF_C L_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 10, 1, 17, 1, "L_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 10, 1, 17, hide_ull(1LL<<16), "L_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu17ll, L_BFu17i_BFu17ll)
//============================================================================


struct  L_BFu17i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 L_BFu17i_BFu1c) C1{ FL Fi:17 Fc:1}



static void Test_L_BFu17i_BFu1c()
{
  {
    init_simple_test("L_BFu17i_BFu1c");
    static STRUCT_IF_C L_BFu17i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu1c, L_BFu17i_BFu1c)
//============================================================================


struct  L_BFu17i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 L_BFu17i_BFu1i) C1{ FL Fi:17 Fi:1}



static void Test_L_BFu17i_BFu1i()
{
  {
    init_simple_test("L_BFu17i_BFu1i");
    static STRUCT_IF_C L_BFu17i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu1i, L_BFu17i_BFu1i)
//============================================================================


struct  L_BFu17i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 L_BFu17i_BFu1ll) C1{ FL Fi:17 FL:1}



static void Test_L_BFu17i_BFu1ll()
{
  {
    init_simple_test("L_BFu17i_BFu1ll");
    static STRUCT_IF_C L_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu1ll, L_BFu17i_BFu1ll)
//============================================================================


struct  L_BFu17i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 L_BFu17i_BFu1s) C1{ FL Fi:17 Fs:1}



static void Test_L_BFu17i_BFu1s()
{
  {
    init_simple_test("L_BFu17i_BFu1s");
    static STRUCT_IF_C L_BFu17i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu1s, L_BFu17i_BFu1s)
//============================================================================


struct  L_BFu17i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 L_BFu17i_BFu31i) C1{ FL Fi:17 Fi:31}



static void Test_L_BFu17i_BFu31i()
{
  {
    init_simple_test("L_BFu17i_BFu31i");
    static STRUCT_IF_C L_BFu17i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu31i, L_BFu17i_BFu31i)
//============================================================================


struct  L_BFu17i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 L_BFu17i_BFu31ll) C1{ FL Fi:17 FL:31}



static void Test_L_BFu17i_BFu31ll()
{
  {
    init_simple_test("L_BFu17i_BFu31ll");
    static STRUCT_IF_C L_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 10, 1, 31, 1, "L_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 10, 1, 31, hide_ull(1LL<<30), "L_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu31ll, L_BFu17i_BFu31ll)
//============================================================================


struct  L_BFu17i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 L_BFu17i_BFu32i) C1{ FL Fi:17 Fi:32}



static void Test_L_BFu17i_BFu32i()
{
  {
    init_simple_test("L_BFu17i_BFu32i");
    static STRUCT_IF_C L_BFu17i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu32i, L_BFu17i_BFu32i)
//============================================================================


struct  L_BFu17i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 L_BFu17i_BFu32ll) C1{ FL Fi:17 FL:32}



static void Test_L_BFu17i_BFu32ll()
{
  {
    init_simple_test("L_BFu17i_BFu32ll");
    static STRUCT_IF_C L_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 10, 1, 32, 1, "L_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 10, 1, 32, hide_ull(1LL<<31), "L_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu32ll, L_BFu17i_BFu32ll)
//============================================================================


struct  L_BFu17i_BFu33  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 L_BFu17i_BFu33) C1{ FL Fi:17 FL:33}



static void Test_L_BFu17i_BFu33()
{
  {
    init_simple_test("L_BFu17i_BFu33");
    static STRUCT_IF_C L_BFu17i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 10, 1, 33, 1, "L_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 10, 1, 33, hide_ull(1LL<<32), "L_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu33, L_BFu17i_BFu33)
//============================================================================


struct  L_BFu17i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 L_BFu17i_BFu7c) C1{ FL Fi:17 Fc:7}



static void Test_L_BFu17i_BFu7c()
{
  {
    init_simple_test("L_BFu17i_BFu7c");
    static STRUCT_IF_C L_BFu17i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu7c, L_BFu17i_BFu7c)
//============================================================================


struct  L_BFu17i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 L_BFu17i_BFu7i) C1{ FL Fi:17 Fi:7}



static void Test_L_BFu17i_BFu7i()
{
  {
    init_simple_test("L_BFu17i_BFu7i");
    static STRUCT_IF_C L_BFu17i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu7i, L_BFu17i_BFu7i)
//============================================================================


struct  L_BFu17i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 L_BFu17i_BFu7ll) C1{ FL Fi:17 FL:7}



static void Test_L_BFu17i_BFu7ll()
{
  {
    init_simple_test("L_BFu17i_BFu7ll");
    static STRUCT_IF_C L_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu7ll, L_BFu17i_BFu7ll)
//============================================================================


struct  L_BFu17i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 L_BFu17i_BFu7s) C1{ FL Fi:17 Fs:7}



static void Test_L_BFu17i_BFu7s()
{
  {
    init_simple_test("L_BFu17i_BFu7s");
    static STRUCT_IF_C L_BFu17i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu7s, L_BFu17i_BFu7s)
//============================================================================


struct  L_BFu17i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 L_BFu17i_BFu8c) C1{ FL Fi:17 Fc:8}



static void Test_L_BFu17i_BFu8c()
{
  {
    init_simple_test("L_BFu17i_BFu8c");
    static STRUCT_IF_C L_BFu17i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 11, 0, 8, 1, "L_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 11, 0, 8, hide_ull(1LL<<7), "L_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu8c, L_BFu17i_BFu8c)
//============================================================================


struct  L_BFu17i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 L_BFu17i_BFu8i) C1{ FL Fi:17 Fi:8}



static void Test_L_BFu17i_BFu8i()
{
  {
    init_simple_test("L_BFu17i_BFu8i");
    static STRUCT_IF_C L_BFu17i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu8i, L_BFu17i_BFu8i)
//============================================================================


struct  L_BFu17i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 L_BFu17i_BFu8ll) C1{ FL Fi:17 FL:8}



static void Test_L_BFu17i_BFu8ll()
{
  {
    init_simple_test("L_BFu17i_BFu8ll");
    static STRUCT_IF_C L_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu8ll, L_BFu17i_BFu8ll)
//============================================================================


struct  L_BFu17i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 L_BFu17i_BFu8s) C1{ FL Fi:17 Fs:8}



static void Test_L_BFu17i_BFu8s()
{
  {
    init_simple_test("L_BFu17i_BFu8s");
    static STRUCT_IF_C L_BFu17i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu8s, L_BFu17i_BFu8s)
//============================================================================


struct  L_BFu17i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 L_BFu17i_BFu9i) C1{ FL Fi:17 Fi:9}



static void Test_L_BFu17i_BFu9i()
{
  {
    init_simple_test("L_BFu17i_BFu9i");
    static STRUCT_IF_C L_BFu17i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu9i, L_BFu17i_BFu9i)
//============================================================================


struct  L_BFu17i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 L_BFu17i_BFu9ll) C1{ FL Fi:17 FL:9}



static void Test_L_BFu17i_BFu9ll()
{
  {
    init_simple_test("L_BFu17i_BFu9ll");
    static STRUCT_IF_C L_BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu9ll, L_BFu17i_BFu9ll)
//============================================================================


struct  L_BFu17i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 L_BFu17i_BFu9s) C1{ FL Fi:17 Fs:9}



static void Test_L_BFu17i_BFu9s()
{
  {
    init_simple_test("L_BFu17i_BFu9s");
    static STRUCT_IF_C L_BFu17i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu9s, L_BFu17i_BFu9s)
//============================================================================


struct  L_BFu17i_C  {
  __tsi64 v1;
  unsigned int v2:17;
  char v3;
};
//SIG(1 L_BFu17i_C) C1{ FL Fi:17 Fc}



static void Test_L_BFu17i_C()
{
  {
    init_simple_test("L_BFu17i_C");
    static STRUCT_IF_C L_BFu17i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_C)");
    check_field_offset(lv, v1, 0, "L_BFu17i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_C");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_C");
    check_field_offset(lv, v3, 11, "L_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_C, L_BFu17i_C)
//============================================================================


struct  L_BFu17i_D  {
  __tsi64 v1;
  unsigned int v2:17;
  double v3;
};
//SIG(1 L_BFu17i_D) C1{ FL Fi:17 FL}



static void Test_L_BFu17i_D()
{
  {
    init_simple_test("L_BFu17i_D");
    static STRUCT_IF_C L_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_D)");
    check_field_offset(lv, v1, 0, "L_BFu17i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_D");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_D, L_BFu17i_D)
//============================================================================


struct  L_BFu17i_F  {
  __tsi64 v1;
  unsigned int v2:17;
  float v3;
};
//SIG(1 L_BFu17i_F) C1{ FL Fi:17 Fi}



static void Test_L_BFu17i_F()
{
  {
    init_simple_test("L_BFu17i_F");
    static STRUCT_IF_C L_BFu17i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_F)");
    check_field_offset(lv, v1, 0, "L_BFu17i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_F");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_F");
    check_field_offset(lv, v3, 12, "L_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_F, L_BFu17i_F)
//============================================================================


struct  L_BFu17i_I  {
  __tsi64 v1;
  unsigned int v2:17;
  int v3;
};
//SIG(1 L_BFu17i_I) C1{ FL Fi:17 Fi}



static void Test_L_BFu17i_I()
{
  {
    init_simple_test("L_BFu17i_I");
    static STRUCT_IF_C L_BFu17i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_I)");
    check_field_offset(lv, v1, 0, "L_BFu17i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_I");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_I");
    check_field_offset(lv, v3, 12, "L_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_I, L_BFu17i_I)
//============================================================================


struct  L_BFu17i_Ip  {
  __tsi64 v1;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 L_BFu17i_Ip) C1{ FL Fi:17 Fp}



static void Test_L_BFu17i_Ip()
{
  {
    init_simple_test("L_BFu17i_Ip");
    static STRUCT_IF_C L_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Ip, L_BFu17i_Ip)
//============================================================================


struct  L_BFu17i_L  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 L_BFu17i_L) C1{ FL Fi:17 FL}



static void Test_L_BFu17i_L()
{
  {
    init_simple_test("L_BFu17i_L");
    static STRUCT_IF_C L_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_L)");
    check_field_offset(lv, v1, 0, "L_BFu17i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_L");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_L, L_BFu17i_L)
//============================================================================


struct  L_BFu17i_S  {
  __tsi64 v1;
  unsigned int v2:17;
  short v3;
};
//SIG(1 L_BFu17i_S) C1{ FL Fi:17 Fs}



static void Test_L_BFu17i_S()
{
  {
    init_simple_test("L_BFu17i_S");
    static STRUCT_IF_C L_BFu17i_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_S)");
    check_field_offset(lv, v1, 0, "L_BFu17i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_S");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_S");
    check_field_offset(lv, v3, 12, "L_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_S, L_BFu17i_S)
//============================================================================


struct  L_BFu17i_Uc  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 L_BFu17i_Uc) C1{ FL Fi:17 Fc}



static void Test_L_BFu17i_Uc()
{
  {
    init_simple_test("L_BFu17i_Uc");
    static STRUCT_IF_C L_BFu17i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Uc");
    check_field_offset(lv, v3, 11, "L_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Uc, L_BFu17i_Uc)
//============================================================================


struct  L_BFu17i_Ui  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 L_BFu17i_Ui) C1{ FL Fi:17 Fi}



static void Test_L_BFu17i_Ui()
{
  {
    init_simple_test("L_BFu17i_Ui");
    static STRUCT_IF_C L_BFu17i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Ui, L_BFu17i_Ui)
//============================================================================


struct  L_BFu17i_Ul  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 L_BFu17i_Ul) C1{ FL Fi:17 FL}



static void Test_L_BFu17i_Ul()
{
  {
    init_simple_test("L_BFu17i_Ul");
    static STRUCT_IF_C L_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Ul, L_BFu17i_Ul)
//============================================================================


struct  L_BFu17i_Us  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 L_BFu17i_Us) C1{ FL Fi:17 Fs}



static void Test_L_BFu17i_Us()
{
  {
    init_simple_test("L_BFu17i_Us");
    static STRUCT_IF_C L_BFu17i_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Us");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Us");
    check_field_offset(lv, v3, 12, "L_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Us, L_BFu17i_Us)
//============================================================================


struct  L_BFu17i_Vp  {
  __tsi64 v1;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 L_BFu17i_Vp) C1{ FL Fi:17 Fp}



static void Test_L_BFu17i_Vp()
{
  {
    init_simple_test("L_BFu17i_Vp");
    static STRUCT_IF_C L_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu17i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_Vp, L_BFu17i_Vp)
//============================================================================


struct  L_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:17;
};
//SIG(1 L_BFu17ll) C1{ FL FL:17}



static void Test_L_BFu17ll()
{
  {
    init_simple_test("L_BFu17ll");
    static STRUCT_IF_C L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll, L_BFu17ll)
//============================================================================


struct  L_BFu17ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 L_BFu17ll_BFu15i) C1{ FL FL:17 Fi:15}



static void Test_L_BFu17ll_BFu15i()
{
  {
    init_simple_test("L_BFu17ll_BFu15i");
    static STRUCT_IF_C L_BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu15i, L_BFu17ll_BFu15i)
//============================================================================


struct  L_BFu17ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 L_BFu17ll_BFu15ll) C1{ FL FL:17 FL:15}



static void Test_L_BFu17ll_BFu15ll()
{
  {
    init_simple_test("L_BFu17ll_BFu15ll");
    static STRUCT_IF_C L_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu15ll, L_BFu17ll_BFu15ll)
//============================================================================


struct  L_BFu17ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 L_BFu17ll_BFu15s) C1{ FL FL:17 Fs:15}



static void Test_L_BFu17ll_BFu15s()
{
  {
    init_simple_test("L_BFu17ll_BFu15s");
    static STRUCT_IF_C L_BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 1, 15, 1, "L_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 1, 15, hide_ull(1LL<<14), "L_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu15s, L_BFu17ll_BFu15s)
//============================================================================


struct  L_BFu17ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 L_BFu17ll_BFu16i) C1{ FL FL:17 Fi:16}



static void Test_L_BFu17ll_BFu16i()
{
  {
    init_simple_test("L_BFu17ll_BFu16i");
    static STRUCT_IF_C L_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu16i, L_BFu17ll_BFu16i)
//============================================================================


struct  L_BFu17ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 L_BFu17ll_BFu16ll) C1{ FL FL:17 FL:16}



static void Test_L_BFu17ll_BFu16ll()
{
  {
    init_simple_test("L_BFu17ll_BFu16ll");
    static STRUCT_IF_C L_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 10, 1, 16, 1, "L_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 10, 1, 16, hide_ull(1LL<<15), "L_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu16ll, L_BFu17ll_BFu16ll)
//============================================================================


struct  L_BFu17ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 L_BFu17ll_BFu16s) C1{ FL FL:17 Fs:16}



static void Test_L_BFu17ll_BFu16s()
{
  {
    init_simple_test("L_BFu17ll_BFu16s");
    static STRUCT_IF_C L_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu16s, L_BFu17ll_BFu16s)
//============================================================================


struct  L_BFu17ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 L_BFu17ll_BFu17i) C1{ FL FL:17 Fi:17}



static void Test_L_BFu17ll_BFu17i()
{
  {
    init_simple_test("L_BFu17ll_BFu17i");
    static STRUCT_IF_C L_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu17i, L_BFu17ll_BFu17i)
//============================================================================


struct  L_BFu17ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 L_BFu17ll_BFu17ll) C1{ FL FL:17 FL:17}



static void Test_L_BFu17ll_BFu17ll()
{
  {
    init_simple_test("L_BFu17ll_BFu17ll");
    static STRUCT_IF_C L_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 10, 1, 17, 1, "L_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 10, 1, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu17ll, L_BFu17ll_BFu17ll)
//============================================================================


struct  L_BFu17ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 L_BFu17ll_BFu1c) C1{ FL FL:17 Fc:1}



static void Test_L_BFu17ll_BFu1c()
{
  {
    init_simple_test("L_BFu17ll_BFu1c");
    static STRUCT_IF_C L_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu1c, L_BFu17ll_BFu1c)
//============================================================================


struct  L_BFu17ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 L_BFu17ll_BFu1i) C1{ FL FL:17 Fi:1}



static void Test_L_BFu17ll_BFu1i()
{
  {
    init_simple_test("L_BFu17ll_BFu1i");
    static STRUCT_IF_C L_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu1i, L_BFu17ll_BFu1i)
//============================================================================


struct  L_BFu17ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 L_BFu17ll_BFu1ll) C1{ FL FL:17 FL:1}



static void Test_L_BFu17ll_BFu1ll()
{
  {
    init_simple_test("L_BFu17ll_BFu1ll");
    static STRUCT_IF_C L_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu1ll, L_BFu17ll_BFu1ll)
//============================================================================


struct  L_BFu17ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 L_BFu17ll_BFu1s) C1{ FL FL:17 Fs:1}



static void Test_L_BFu17ll_BFu1s()
{
  {
    init_simple_test("L_BFu17ll_BFu1s");
    static STRUCT_IF_C L_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 10, 1, 1, 1, "L_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu1s, L_BFu17ll_BFu1s)
//============================================================================


struct  L_BFu17ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 L_BFu17ll_BFu31i) C1{ FL FL:17 Fi:31}



static void Test_L_BFu17ll_BFu31i()
{
  {
    init_simple_test("L_BFu17ll_BFu31i");
    static STRUCT_IF_C L_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu31i, L_BFu17ll_BFu31i)
//============================================================================


struct  L_BFu17ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 L_BFu17ll_BFu31ll) C1{ FL FL:17 FL:31}



static void Test_L_BFu17ll_BFu31ll()
{
  {
    init_simple_test("L_BFu17ll_BFu31ll");
    static STRUCT_IF_C L_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 10, 1, 31, 1, "L_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 10, 1, 31, hide_ull(1LL<<30), "L_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu31ll, L_BFu17ll_BFu31ll)
//============================================================================


struct  L_BFu17ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 L_BFu17ll_BFu32i) C1{ FL FL:17 Fi:32}



static void Test_L_BFu17ll_BFu32i()
{
  {
    init_simple_test("L_BFu17ll_BFu32i");
    static STRUCT_IF_C L_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu32i, L_BFu17ll_BFu32i)
//============================================================================


struct  L_BFu17ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 L_BFu17ll_BFu32ll) C1{ FL FL:17 FL:32}



static void Test_L_BFu17ll_BFu32ll()
{
  {
    init_simple_test("L_BFu17ll_BFu32ll");
    static STRUCT_IF_C L_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 10, 1, 32, 1, "L_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 10, 1, 32, hide_ull(1LL<<31), "L_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu32ll, L_BFu17ll_BFu32ll)
//============================================================================


struct  L_BFu17ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 L_BFu17ll_BFu33) C1{ FL FL:17 FL:33}



static void Test_L_BFu17ll_BFu33()
{
  {
    init_simple_test("L_BFu17ll_BFu33");
    static STRUCT_IF_C L_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 10, 1, 33, 1, "L_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 10, 1, 33, hide_ull(1LL<<32), "L_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu33, L_BFu17ll_BFu33)
//============================================================================


struct  L_BFu17ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 L_BFu17ll_BFu7c) C1{ FL FL:17 Fc:7}



static void Test_L_BFu17ll_BFu7c()
{
  {
    init_simple_test("L_BFu17ll_BFu7c");
    static STRUCT_IF_C L_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu7c, L_BFu17ll_BFu7c)
//============================================================================


struct  L_BFu17ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 L_BFu17ll_BFu7i) C1{ FL FL:17 Fi:7}



static void Test_L_BFu17ll_BFu7i()
{
  {
    init_simple_test("L_BFu17ll_BFu7i");
    static STRUCT_IF_C L_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu7i, L_BFu17ll_BFu7i)
//============================================================================


struct  L_BFu17ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 L_BFu17ll_BFu7ll) C1{ FL FL:17 FL:7}



static void Test_L_BFu17ll_BFu7ll()
{
  {
    init_simple_test("L_BFu17ll_BFu7ll");
    static STRUCT_IF_C L_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu7ll, L_BFu17ll_BFu7ll)
//============================================================================


struct  L_BFu17ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 L_BFu17ll_BFu7s) C1{ FL FL:17 Fs:7}



static void Test_L_BFu17ll_BFu7s()
{
  {
    init_simple_test("L_BFu17ll_BFu7s");
    static STRUCT_IF_C L_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 1, 7, 1, "L_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 10, 1, 7, hide_ull(1LL<<6), "L_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu7s, L_BFu17ll_BFu7s)
//============================================================================


struct  L_BFu17ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 L_BFu17ll_BFu8c) C1{ FL FL:17 Fc:8}



static void Test_L_BFu17ll_BFu8c()
{
  {
    init_simple_test("L_BFu17ll_BFu8c");
    static STRUCT_IF_C L_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 11, 0, 8, 1, "L_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 11, 0, 8, hide_ull(1LL<<7), "L_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu8c, L_BFu17ll_BFu8c)
//============================================================================


struct  L_BFu17ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 L_BFu17ll_BFu8i) C1{ FL FL:17 Fi:8}



static void Test_L_BFu17ll_BFu8i()
{
  {
    init_simple_test("L_BFu17ll_BFu8i");
    static STRUCT_IF_C L_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu8i, L_BFu17ll_BFu8i)
//============================================================================


struct  L_BFu17ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 L_BFu17ll_BFu8ll) C1{ FL FL:17 FL:8}



static void Test_L_BFu17ll_BFu8ll()
{
  {
    init_simple_test("L_BFu17ll_BFu8ll");
    static STRUCT_IF_C L_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu8ll, L_BFu17ll_BFu8ll)
//============================================================================


struct  L_BFu17ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 L_BFu17ll_BFu8s) C1{ FL FL:17 Fs:8}



static void Test_L_BFu17ll_BFu8s()
{
  {
    init_simple_test("L_BFu17ll_BFu8s");
    static STRUCT_IF_C L_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 1, 8, 1, "L_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 1, 8, hide_ull(1LL<<7), "L_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu8s, L_BFu17ll_BFu8s)
//============================================================================


struct  L_BFu17ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 L_BFu17ll_BFu9i) C1{ FL FL:17 Fi:9}



static void Test_L_BFu17ll_BFu9i()
{
  {
    init_simple_test("L_BFu17ll_BFu9i");
    static STRUCT_IF_C L_BFu17ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu9i, L_BFu17ll_BFu9i)
//============================================================================


struct  L_BFu17ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 L_BFu17ll_BFu9ll) C1{ FL FL:17 FL:9}



static void Test_L_BFu17ll_BFu9ll()
{
  {
    init_simple_test("L_BFu17ll_BFu9ll");
    static STRUCT_IF_C L_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu9ll, L_BFu17ll_BFu9ll)
//============================================================================


struct  L_BFu17ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 L_BFu17ll_BFu9s) C1{ FL FL:17 Fs:9}



static void Test_L_BFu17ll_BFu9s()
{
  {
    init_simple_test("L_BFu17ll_BFu9s");
    static STRUCT_IF_C L_BFu17ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 1, 9, 1, "L_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 1, 9, hide_ull(1LL<<8), "L_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu9s, L_BFu17ll_BFu9s)
//============================================================================


struct  L_BFu17ll_C  {
  __tsi64 v1;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 L_BFu17ll_C) C1{ FL FL:17 Fc}



static void Test_L_BFu17ll_C()
{
  {
    init_simple_test("L_BFu17ll_C");
    static STRUCT_IF_C L_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_C");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_C");
    check_field_offset(lv, v3, 11, "L_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_C, L_BFu17ll_C)
//============================================================================


struct  L_BFu17ll_D  {
  __tsi64 v1;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 L_BFu17ll_D) C1{ FL FL:17 FL}



static void Test_L_BFu17ll_D()
{
  {
    init_simple_test("L_BFu17ll_D");
    static STRUCT_IF_C L_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_D");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_D, L_BFu17ll_D)
//============================================================================


struct  L_BFu17ll_F  {
  __tsi64 v1;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 L_BFu17ll_F) C1{ FL FL:17 Fi}



static void Test_L_BFu17ll_F()
{
  {
    init_simple_test("L_BFu17ll_F");
    static STRUCT_IF_C L_BFu17ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_F");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_F");
    check_field_offset(lv, v3, 12, "L_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_F, L_BFu17ll_F)
//============================================================================


struct  L_BFu17ll_I  {
  __tsi64 v1;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 L_BFu17ll_I) C1{ FL FL:17 Fi}



static void Test_L_BFu17ll_I()
{
  {
    init_simple_test("L_BFu17ll_I");
    static STRUCT_IF_C L_BFu17ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_I");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_I");
    check_field_offset(lv, v3, 12, "L_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_I, L_BFu17ll_I)
//============================================================================


struct  L_BFu17ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 L_BFu17ll_Ip) C1{ FL FL:17 Fp}



static void Test_L_BFu17ll_Ip()
{
  {
    init_simple_test("L_BFu17ll_Ip");
    static STRUCT_IF_C L_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Ip, L_BFu17ll_Ip)
//============================================================================


struct  L_BFu17ll_L  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 L_BFu17ll_L) C1{ FL FL:17 FL}



static void Test_L_BFu17ll_L()
{
  {
    init_simple_test("L_BFu17ll_L");
    static STRUCT_IF_C L_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_L");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_L, L_BFu17ll_L)
//============================================================================


struct  L_BFu17ll_S  {
  __tsi64 v1;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 L_BFu17ll_S) C1{ FL FL:17 Fs}



static void Test_L_BFu17ll_S()
{
  {
    init_simple_test("L_BFu17ll_S");
    static STRUCT_IF_C L_BFu17ll_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_S");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_S");
    check_field_offset(lv, v3, 12, "L_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_S, L_BFu17ll_S)
//============================================================================


struct  L_BFu17ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 L_BFu17ll_Uc) C1{ FL FL:17 Fc}



static void Test_L_BFu17ll_Uc()
{
  {
    init_simple_test("L_BFu17ll_Uc");
    static STRUCT_IF_C L_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Uc");
    check_field_offset(lv, v3, 11, "L_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Uc, L_BFu17ll_Uc)
//============================================================================


struct  L_BFu17ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 L_BFu17ll_Ui) C1{ FL FL:17 Fi}



static void Test_L_BFu17ll_Ui()
{
  {
    init_simple_test("L_BFu17ll_Ui");
    static STRUCT_IF_C L_BFu17ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Ui, L_BFu17ll_Ui)
//============================================================================


struct  L_BFu17ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 L_BFu17ll_Ul) C1{ FL FL:17 FL}



static void Test_L_BFu17ll_Ul()
{
  {
    init_simple_test("L_BFu17ll_Ul");
    static STRUCT_IF_C L_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Ul, L_BFu17ll_Ul)
//============================================================================


struct  L_BFu17ll_Us  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 L_BFu17ll_Us) C1{ FL FL:17 Fs}



static void Test_L_BFu17ll_Us()
{
  {
    init_simple_test("L_BFu17ll_Us");
    static STRUCT_IF_C L_BFu17ll_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Us");
    check_field_offset(lv, v3, 12, "L_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Us, L_BFu17ll_Us)
//============================================================================


struct  L_BFu17ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 L_BFu17ll_Vp) C1{ FL FL:17 Fp}



static void Test_L_BFu17ll_Vp()
{
  {
    init_simple_test("L_BFu17ll_Vp");
    static STRUCT_IF_C L_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_Vp, L_BFu17ll_Vp)
//============================================================================


struct  L_BFu1c  {
  __tsi64 v1;
  unsigned char v2:1;
};
//SIG(1 L_BFu1c) C1{ FL Fc:1}



static void Test_L_BFu1c()
{
  {
    init_simple_test("L_BFu1c");
    static STRUCT_IF_C L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c, L_BFu1c)
//============================================================================


struct  L_BFu1c_BFu15i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 L_BFu1c_BFu15i) C1{ FL Fc:1 Fi:15}



static void Test_L_BFu1c_BFu15i()
{
  {
    init_simple_test("L_BFu1c_BFu15i");
    static STRUCT_IF_C L_BFu1c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu15i, L_BFu1c_BFu15i)
//============================================================================


struct  L_BFu1c_BFu15ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 L_BFu1c_BFu15ll) C1{ FL Fc:1 FL:15}



static void Test_L_BFu1c_BFu15ll()
{
  {
    init_simple_test("L_BFu1c_BFu15ll");
    static STRUCT_IF_C L_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu15ll, L_BFu1c_BFu15ll)
//============================================================================


struct  L_BFu1c_BFu15s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 L_BFu1c_BFu15s) C1{ FL Fc:1 Fs:15}



static void Test_L_BFu1c_BFu15s()
{
  {
    init_simple_test("L_BFu1c_BFu15s");
    static STRUCT_IF_C L_BFu1c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu15s, L_BFu1c_BFu15s)
//============================================================================


struct  L_BFu1c_BFu16i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 L_BFu1c_BFu16i) C1{ FL Fc:1 Fi:16}



static void Test_L_BFu1c_BFu16i()
{
  {
    init_simple_test("L_BFu1c_BFu16i");
    static STRUCT_IF_C L_BFu1c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu16i, L_BFu1c_BFu16i)
//============================================================================


struct  L_BFu1c_BFu16ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 L_BFu1c_BFu16ll) C1{ FL Fc:1 FL:16}



static void Test_L_BFu1c_BFu16ll()
{
  {
    init_simple_test("L_BFu1c_BFu16ll");
    static STRUCT_IF_C L_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu16ll, L_BFu1c_BFu16ll)
//============================================================================


struct  L_BFu1c_BFu16s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 L_BFu1c_BFu16s) C1{ FL Fc:1 Fs:16}



static void Test_L_BFu1c_BFu16s()
{
  {
    init_simple_test("L_BFu1c_BFu16s");
    static STRUCT_IF_C L_BFu1c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu16s, L_BFu1c_BFu16s)
//============================================================================


struct  L_BFu1c_BFu17i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 L_BFu1c_BFu17i) C1{ FL Fc:1 Fi:17}



static void Test_L_BFu1c_BFu17i()
{
  {
    init_simple_test("L_BFu1c_BFu17i");
    static STRUCT_IF_C L_BFu1c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu17i, L_BFu1c_BFu17i)
//============================================================================


struct  L_BFu1c_BFu17ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 L_BFu1c_BFu17ll) C1{ FL Fc:1 FL:17}



static void Test_L_BFu1c_BFu17ll()
{
  {
    init_simple_test("L_BFu1c_BFu17ll");
    static STRUCT_IF_C L_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu17ll, L_BFu1c_BFu17ll)
//============================================================================


struct  L_BFu1c_BFu1c  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 L_BFu1c_BFu1c) C1{ FL Fc:1 Fc:1}



static void Test_L_BFu1c_BFu1c()
{
  {
    init_simple_test("L_BFu1c_BFu1c");
    static STRUCT_IF_C L_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu1c, L_BFu1c_BFu1c)
//============================================================================


struct  L_BFu1c_BFu1i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 L_BFu1c_BFu1i) C1{ FL Fc:1 Fi:1}



static void Test_L_BFu1c_BFu1i()
{
  {
    init_simple_test("L_BFu1c_BFu1i");
    static STRUCT_IF_C L_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu1i, L_BFu1c_BFu1i)
//============================================================================


struct  L_BFu1c_BFu1ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 L_BFu1c_BFu1ll) C1{ FL Fc:1 FL:1}



static void Test_L_BFu1c_BFu1ll()
{
  {
    init_simple_test("L_BFu1c_BFu1ll");
    static STRUCT_IF_C L_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu1ll, L_BFu1c_BFu1ll)
//============================================================================


struct  L_BFu1c_BFu1s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 L_BFu1c_BFu1s) C1{ FL Fc:1 Fs:1}



static void Test_L_BFu1c_BFu1s()
{
  {
    init_simple_test("L_BFu1c_BFu1s");
    static STRUCT_IF_C L_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu1s, L_BFu1c_BFu1s)
//============================================================================


struct  L_BFu1c_BFu31i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 L_BFu1c_BFu31i) C1{ FL Fc:1 Fi:31}



static void Test_L_BFu1c_BFu31i()
{
  {
    init_simple_test("L_BFu1c_BFu31i");
    static STRUCT_IF_C L_BFu1c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu31i, L_BFu1c_BFu31i)
//============================================================================


struct  L_BFu1c_BFu31ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 L_BFu1c_BFu31ll) C1{ FL Fc:1 FL:31}



static void Test_L_BFu1c_BFu31ll()
{
  {
    init_simple_test("L_BFu1c_BFu31ll");
    static STRUCT_IF_C L_BFu1c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu31ll, L_BFu1c_BFu31ll)
//============================================================================


struct  L_BFu1c_BFu32i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 L_BFu1c_BFu32i) C1{ FL Fc:1 Fi:32}



static void Test_L_BFu1c_BFu32i()
{
  {
    init_simple_test("L_BFu1c_BFu32i");
    static STRUCT_IF_C L_BFu1c_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu32i, L_BFu1c_BFu32i)
//============================================================================


struct  L_BFu1c_BFu32ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 L_BFu1c_BFu32ll) C1{ FL Fc:1 FL:32}



static void Test_L_BFu1c_BFu32ll()
{
  {
    init_simple_test("L_BFu1c_BFu32ll");
    static STRUCT_IF_C L_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, 1, "L_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, hide_ull(1LL<<31), "L_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu32ll, L_BFu1c_BFu32ll)
//============================================================================


struct  L_BFu1c_BFu33  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 L_BFu1c_BFu33) C1{ FL Fc:1 FL:33}



static void Test_L_BFu1c_BFu33()
{
  {
    init_simple_test("L_BFu1c_BFu33");
    static STRUCT_IF_C L_BFu1c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, 1, "L_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, hide_ull(1LL<<32), "L_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu33, L_BFu1c_BFu33)
//============================================================================


struct  L_BFu1c_BFu7c  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 L_BFu1c_BFu7c) C1{ FL Fc:1 Fc:7}



static void Test_L_BFu1c_BFu7c()
{
  {
    init_simple_test("L_BFu1c_BFu7c");
    static STRUCT_IF_C L_BFu1c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu7c, L_BFu1c_BFu7c)
//============================================================================


struct  L_BFu1c_BFu7i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 L_BFu1c_BFu7i) C1{ FL Fc:1 Fi:7}



static void Test_L_BFu1c_BFu7i()
{
  {
    init_simple_test("L_BFu1c_BFu7i");
    static STRUCT_IF_C L_BFu1c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu7i, L_BFu1c_BFu7i)
//============================================================================


struct  L_BFu1c_BFu7ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 L_BFu1c_BFu7ll) C1{ FL Fc:1 FL:7}



static void Test_L_BFu1c_BFu7ll()
{
  {
    init_simple_test("L_BFu1c_BFu7ll");
    static STRUCT_IF_C L_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu7ll, L_BFu1c_BFu7ll)
//============================================================================


struct  L_BFu1c_BFu7s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 L_BFu1c_BFu7s) C1{ FL Fc:1 Fs:7}



static void Test_L_BFu1c_BFu7s()
{
  {
    init_simple_test("L_BFu1c_BFu7s");
    static STRUCT_IF_C L_BFu1c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu7s, L_BFu1c_BFu7s)
//============================================================================


struct  L_BFu1c_BFu8c  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 L_BFu1c_BFu8c) C1{ FL Fc:1 Fc:8}



static void Test_L_BFu1c_BFu8c()
{
  {
    init_simple_test("L_BFu1c_BFu8c");
    static STRUCT_IF_C L_BFu1c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu8c, L_BFu1c_BFu8c)
//============================================================================


struct  L_BFu1c_BFu8i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 L_BFu1c_BFu8i) C1{ FL Fc:1 Fi:8}



static void Test_L_BFu1c_BFu8i()
{
  {
    init_simple_test("L_BFu1c_BFu8i");
    static STRUCT_IF_C L_BFu1c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu8i, L_BFu1c_BFu8i)
//============================================================================


struct  L_BFu1c_BFu8ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 L_BFu1c_BFu8ll) C1{ FL Fc:1 FL:8}



static void Test_L_BFu1c_BFu8ll()
{
  {
    init_simple_test("L_BFu1c_BFu8ll");
    static STRUCT_IF_C L_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu8ll, L_BFu1c_BFu8ll)
//============================================================================


struct  L_BFu1c_BFu8s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 L_BFu1c_BFu8s) C1{ FL Fc:1 Fs:8}



static void Test_L_BFu1c_BFu8s()
{
  {
    init_simple_test("L_BFu1c_BFu8s");
    static STRUCT_IF_C L_BFu1c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu8s, L_BFu1c_BFu8s)
//============================================================================


struct  L_BFu1c_BFu9i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 L_BFu1c_BFu9i) C1{ FL Fc:1 Fi:9}



static void Test_L_BFu1c_BFu9i()
{
  {
    init_simple_test("L_BFu1c_BFu9i");
    static STRUCT_IF_C L_BFu1c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu9i, L_BFu1c_BFu9i)
//============================================================================


struct  L_BFu1c_BFu9ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 L_BFu1c_BFu9ll) C1{ FL Fc:1 FL:9}



static void Test_L_BFu1c_BFu9ll()
{
  {
    init_simple_test("L_BFu1c_BFu9ll");
    static STRUCT_IF_C L_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu9ll, L_BFu1c_BFu9ll)
//============================================================================


struct  L_BFu1c_BFu9s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 L_BFu1c_BFu9s) C1{ FL Fc:1 Fs:9}



static void Test_L_BFu1c_BFu9s()
{
  {
    init_simple_test("L_BFu1c_BFu9s");
    static STRUCT_IF_C L_BFu1c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu9s, L_BFu1c_BFu9s)
//============================================================================


struct  L_BFu1c_C  {
  __tsi64 v1;
  unsigned char v2:1;
  char v3;
};
//SIG(1 L_BFu1c_C) C1{ FL Fc:1 Fc}



static void Test_L_BFu1c_C()
{
  {
    init_simple_test("L_BFu1c_C");
    static STRUCT_IF_C L_BFu1c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_C)");
    check_field_offset(lv, v1, 0, "L_BFu1c_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_C");
    check_field_offset(lv, v3, 9, "L_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_C, L_BFu1c_C)
//============================================================================


struct  L_BFu1c_D  {
  __tsi64 v1;
  unsigned char v2:1;
  double v3;
};
//SIG(1 L_BFu1c_D) C1{ FL Fc:1 FL}



static void Test_L_BFu1c_D()
{
  {
    init_simple_test("L_BFu1c_D");
    static STRUCT_IF_C L_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_D)");
    check_field_offset(lv, v1, 0, "L_BFu1c_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_D, L_BFu1c_D)
//============================================================================


struct  L_BFu1c_F  {
  __tsi64 v1;
  unsigned char v2:1;
  float v3;
};
//SIG(1 L_BFu1c_F) C1{ FL Fc:1 Fi}



static void Test_L_BFu1c_F()
{
  {
    init_simple_test("L_BFu1c_F");
    static STRUCT_IF_C L_BFu1c_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_F)");
    check_field_offset(lv, v1, 0, "L_BFu1c_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_F");
    check_field_offset(lv, v3, 12, "L_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_F, L_BFu1c_F)
//============================================================================


struct  L_BFu1c_I  {
  __tsi64 v1;
  unsigned char v2:1;
  int v3;
};
//SIG(1 L_BFu1c_I) C1{ FL Fc:1 Fi}



static void Test_L_BFu1c_I()
{
  {
    init_simple_test("L_BFu1c_I");
    static STRUCT_IF_C L_BFu1c_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_I)");
    check_field_offset(lv, v1, 0, "L_BFu1c_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_I");
    check_field_offset(lv, v3, 12, "L_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_I, L_BFu1c_I)
//============================================================================


struct  L_BFu1c_Ip  {
  __tsi64 v1;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 L_BFu1c_Ip) C1{ FL Fc:1 Fp}



static void Test_L_BFu1c_Ip()
{
  {
    init_simple_test("L_BFu1c_Ip");
    static STRUCT_IF_C L_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Ip, L_BFu1c_Ip)
//============================================================================


struct  L_BFu1c_L  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 L_BFu1c_L) C1{ FL Fc:1 FL}



static void Test_L_BFu1c_L()
{
  {
    init_simple_test("L_BFu1c_L");
    static STRUCT_IF_C L_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_L)");
    check_field_offset(lv, v1, 0, "L_BFu1c_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_L, L_BFu1c_L)
//============================================================================


struct  L_BFu1c_S  {
  __tsi64 v1;
  unsigned char v2:1;
  short v3;
};
//SIG(1 L_BFu1c_S) C1{ FL Fc:1 Fs}



static void Test_L_BFu1c_S()
{
  {
    init_simple_test("L_BFu1c_S");
    static STRUCT_IF_C L_BFu1c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_S)");
    check_field_offset(lv, v1, 0, "L_BFu1c_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_S");
    check_field_offset(lv, v3, 10, "L_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_S, L_BFu1c_S)
//============================================================================


struct  L_BFu1c_Uc  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 L_BFu1c_Uc) C1{ FL Fc:1 Fc}



static void Test_L_BFu1c_Uc()
{
  {
    init_simple_test("L_BFu1c_Uc");
    static STRUCT_IF_C L_BFu1c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Uc");
    check_field_offset(lv, v3, 9, "L_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Uc, L_BFu1c_Uc)
//============================================================================


struct  L_BFu1c_Ui  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 L_BFu1c_Ui) C1{ FL Fc:1 Fi}



static void Test_L_BFu1c_Ui()
{
  {
    init_simple_test("L_BFu1c_Ui");
    static STRUCT_IF_C L_BFu1c_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Ui");
    check_field_offset(lv, v3, 12, "L_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Ui, L_BFu1c_Ui)
//============================================================================


struct  L_BFu1c_Ul  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 L_BFu1c_Ul) C1{ FL Fc:1 FL}



static void Test_L_BFu1c_Ul()
{
  {
    init_simple_test("L_BFu1c_Ul");
    static STRUCT_IF_C L_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Ul, L_BFu1c_Ul)
//============================================================================


struct  L_BFu1c_Us  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 L_BFu1c_Us) C1{ FL Fc:1 Fs}



static void Test_L_BFu1c_Us()
{
  {
    init_simple_test("L_BFu1c_Us");
    static STRUCT_IF_C L_BFu1c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Us)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Us");
    check_field_offset(lv, v3, 10, "L_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Us, L_BFu1c_Us)
//============================================================================


struct  L_BFu1c_Vp  {
  __tsi64 v1;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 L_BFu1c_Vp) C1{ FL Fc:1 Fp}



static void Test_L_BFu1c_Vp()
{
  {
    init_simple_test("L_BFu1c_Vp");
    static STRUCT_IF_C L_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu1c_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_Vp, L_BFu1c_Vp)
//============================================================================


struct  L_BFu1i  {
  __tsi64 v1;
  unsigned int v2:1;
};
//SIG(1 L_BFu1i) C1{ FL Fi:1}



static void Test_L_BFu1i()
{
  {
    init_simple_test("L_BFu1i");
    static STRUCT_IF_C L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i, L_BFu1i)
//============================================================================


struct  L_BFu1i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 L_BFu1i_BFu15i) C1{ FL Fi:1 Fi:15}



static void Test_L_BFu1i_BFu15i()
{
  {
    init_simple_test("L_BFu1i_BFu15i");
    static STRUCT_IF_C L_BFu1i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu15i, L_BFu1i_BFu15i)
//============================================================================


struct  L_BFu1i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 L_BFu1i_BFu15ll) C1{ FL Fi:1 FL:15}



static void Test_L_BFu1i_BFu15ll()
{
  {
    init_simple_test("L_BFu1i_BFu15ll");
    static STRUCT_IF_C L_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu15ll, L_BFu1i_BFu15ll)
//============================================================================


struct  L_BFu1i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 L_BFu1i_BFu15s) C1{ FL Fi:1 Fs:15}



static void Test_L_BFu1i_BFu15s()
{
  {
    init_simple_test("L_BFu1i_BFu15s");
    static STRUCT_IF_C L_BFu1i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu15s, L_BFu1i_BFu15s)
//============================================================================


struct  L_BFu1i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 L_BFu1i_BFu16i) C1{ FL Fi:1 Fi:16}



static void Test_L_BFu1i_BFu16i()
{
  {
    init_simple_test("L_BFu1i_BFu16i");
    static STRUCT_IF_C L_BFu1i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu16i, L_BFu1i_BFu16i)
//============================================================================


struct  L_BFu1i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 L_BFu1i_BFu16ll) C1{ FL Fi:1 FL:16}



static void Test_L_BFu1i_BFu16ll()
{
  {
    init_simple_test("L_BFu1i_BFu16ll");
    static STRUCT_IF_C L_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu16ll, L_BFu1i_BFu16ll)
//============================================================================


struct  L_BFu1i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 L_BFu1i_BFu16s) C1{ FL Fi:1 Fs:16}



static void Test_L_BFu1i_BFu16s()
{
  {
    init_simple_test("L_BFu1i_BFu16s");
    static STRUCT_IF_C L_BFu1i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu16s, L_BFu1i_BFu16s)
//============================================================================


struct  L_BFu1i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 L_BFu1i_BFu17i) C1{ FL Fi:1 Fi:17}



static void Test_L_BFu1i_BFu17i()
{
  {
    init_simple_test("L_BFu1i_BFu17i");
    static STRUCT_IF_C L_BFu1i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu17i, L_BFu1i_BFu17i)
//============================================================================


struct  L_BFu1i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 L_BFu1i_BFu17ll) C1{ FL Fi:1 FL:17}



static void Test_L_BFu1i_BFu17ll()
{
  {
    init_simple_test("L_BFu1i_BFu17ll");
    static STRUCT_IF_C L_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu17ll, L_BFu1i_BFu17ll)
//============================================================================


struct  L_BFu1i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 L_BFu1i_BFu1c) C1{ FL Fi:1 Fc:1}



static void Test_L_BFu1i_BFu1c()
{
  {
    init_simple_test("L_BFu1i_BFu1c");
    static STRUCT_IF_C L_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu1c, L_BFu1i_BFu1c)
//============================================================================


struct  L_BFu1i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 L_BFu1i_BFu1i) C1{ FL Fi:1 Fi:1}



static void Test_L_BFu1i_BFu1i()
{
  {
    init_simple_test("L_BFu1i_BFu1i");
    static STRUCT_IF_C L_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu1i, L_BFu1i_BFu1i)
//============================================================================


struct  L_BFu1i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 L_BFu1i_BFu1ll) C1{ FL Fi:1 FL:1}



static void Test_L_BFu1i_BFu1ll()
{
  {
    init_simple_test("L_BFu1i_BFu1ll");
    static STRUCT_IF_C L_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu1ll, L_BFu1i_BFu1ll)
//============================================================================


struct  L_BFu1i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 L_BFu1i_BFu1s) C1{ FL Fi:1 Fs:1}



static void Test_L_BFu1i_BFu1s()
{
  {
    init_simple_test("L_BFu1i_BFu1s");
    static STRUCT_IF_C L_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu1s, L_BFu1i_BFu1s)
//============================================================================


struct  L_BFu1i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 L_BFu1i_BFu31i) C1{ FL Fi:1 Fi:31}



static void Test_L_BFu1i_BFu31i()
{
  {
    init_simple_test("L_BFu1i_BFu31i");
    static STRUCT_IF_C L_BFu1i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu31i, L_BFu1i_BFu31i)
//============================================================================


struct  L_BFu1i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 L_BFu1i_BFu31ll) C1{ FL Fi:1 FL:31}



static void Test_L_BFu1i_BFu31ll()
{
  {
    init_simple_test("L_BFu1i_BFu31ll");
    static STRUCT_IF_C L_BFu1i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu31ll, L_BFu1i_BFu31ll)
//============================================================================


struct  L_BFu1i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 L_BFu1i_BFu32i) C1{ FL Fi:1 Fi:32}



static void Test_L_BFu1i_BFu32i()
{
  {
    init_simple_test("L_BFu1i_BFu32i");
    static STRUCT_IF_C L_BFu1i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu32i, L_BFu1i_BFu32i)
//============================================================================


struct  L_BFu1i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 L_BFu1i_BFu32ll) C1{ FL Fi:1 FL:32}



static void Test_L_BFu1i_BFu32ll()
{
  {
    init_simple_test("L_BFu1i_BFu32ll");
    static STRUCT_IF_C L_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, 1, "L_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, hide_ull(1LL<<31), "L_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu32ll, L_BFu1i_BFu32ll)
//============================================================================


struct  L_BFu1i_BFu33  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 L_BFu1i_BFu33) C1{ FL Fi:1 FL:33}



static void Test_L_BFu1i_BFu33()
{
  {
    init_simple_test("L_BFu1i_BFu33");
    static STRUCT_IF_C L_BFu1i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, 1, "L_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, hide_ull(1LL<<32), "L_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu33, L_BFu1i_BFu33)
//============================================================================


struct  L_BFu1i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 L_BFu1i_BFu7c) C1{ FL Fi:1 Fc:7}



static void Test_L_BFu1i_BFu7c()
{
  {
    init_simple_test("L_BFu1i_BFu7c");
    static STRUCT_IF_C L_BFu1i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu7c, L_BFu1i_BFu7c)
//============================================================================


struct  L_BFu1i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 L_BFu1i_BFu7i) C1{ FL Fi:1 Fi:7}



static void Test_L_BFu1i_BFu7i()
{
  {
    init_simple_test("L_BFu1i_BFu7i");
    static STRUCT_IF_C L_BFu1i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu7i, L_BFu1i_BFu7i)
//============================================================================


struct  L_BFu1i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 L_BFu1i_BFu7ll) C1{ FL Fi:1 FL:7}



static void Test_L_BFu1i_BFu7ll()
{
  {
    init_simple_test("L_BFu1i_BFu7ll");
    static STRUCT_IF_C L_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu7ll, L_BFu1i_BFu7ll)
//============================================================================


struct  L_BFu1i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 L_BFu1i_BFu7s) C1{ FL Fi:1 Fs:7}



static void Test_L_BFu1i_BFu7s()
{
  {
    init_simple_test("L_BFu1i_BFu7s");
    static STRUCT_IF_C L_BFu1i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu7s, L_BFu1i_BFu7s)
//============================================================================


struct  L_BFu1i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 L_BFu1i_BFu8c) C1{ FL Fi:1 Fc:8}



static void Test_L_BFu1i_BFu8c()
{
  {
    init_simple_test("L_BFu1i_BFu8c");
    static STRUCT_IF_C L_BFu1i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu8c, L_BFu1i_BFu8c)
//============================================================================


struct  L_BFu1i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 L_BFu1i_BFu8i) C1{ FL Fi:1 Fi:8}



static void Test_L_BFu1i_BFu8i()
{
  {
    init_simple_test("L_BFu1i_BFu8i");
    static STRUCT_IF_C L_BFu1i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu8i, L_BFu1i_BFu8i)
//============================================================================


struct  L_BFu1i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 L_BFu1i_BFu8ll) C1{ FL Fi:1 FL:8}



static void Test_L_BFu1i_BFu8ll()
{
  {
    init_simple_test("L_BFu1i_BFu8ll");
    static STRUCT_IF_C L_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu8ll, L_BFu1i_BFu8ll)
//============================================================================


struct  L_BFu1i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 L_BFu1i_BFu8s) C1{ FL Fi:1 Fs:8}



static void Test_L_BFu1i_BFu8s()
{
  {
    init_simple_test("L_BFu1i_BFu8s");
    static STRUCT_IF_C L_BFu1i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu8s, L_BFu1i_BFu8s)
//============================================================================


struct  L_BFu1i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 L_BFu1i_BFu9i) C1{ FL Fi:1 Fi:9}



static void Test_L_BFu1i_BFu9i()
{
  {
    init_simple_test("L_BFu1i_BFu9i");
    static STRUCT_IF_C L_BFu1i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu9i, L_BFu1i_BFu9i)
//============================================================================


struct  L_BFu1i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 L_BFu1i_BFu9ll) C1{ FL Fi:1 FL:9}



static void Test_L_BFu1i_BFu9ll()
{
  {
    init_simple_test("L_BFu1i_BFu9ll");
    static STRUCT_IF_C L_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu9ll, L_BFu1i_BFu9ll)
//============================================================================


struct  L_BFu1i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 L_BFu1i_BFu9s) C1{ FL Fi:1 Fs:9}



static void Test_L_BFu1i_BFu9s()
{
  {
    init_simple_test("L_BFu1i_BFu9s");
    static STRUCT_IF_C L_BFu1i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu9s, L_BFu1i_BFu9s)
//============================================================================


struct  L_BFu1i_C  {
  __tsi64 v1;
  unsigned int v2:1;
  char v3;
};
//SIG(1 L_BFu1i_C) C1{ FL Fi:1 Fc}



static void Test_L_BFu1i_C()
{
  {
    init_simple_test("L_BFu1i_C");
    static STRUCT_IF_C L_BFu1i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_C)");
    check_field_offset(lv, v1, 0, "L_BFu1i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_C");
    check_field_offset(lv, v3, 9, "L_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_C, L_BFu1i_C)
//============================================================================


struct  L_BFu1i_D  {
  __tsi64 v1;
  unsigned int v2:1;
  double v3;
};
//SIG(1 L_BFu1i_D) C1{ FL Fi:1 FL}



static void Test_L_BFu1i_D()
{
  {
    init_simple_test("L_BFu1i_D");
    static STRUCT_IF_C L_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_D)");
    check_field_offset(lv, v1, 0, "L_BFu1i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_D, L_BFu1i_D)
//============================================================================


struct  L_BFu1i_F  {
  __tsi64 v1;
  unsigned int v2:1;
  float v3;
};
//SIG(1 L_BFu1i_F) C1{ FL Fi:1 Fi}



static void Test_L_BFu1i_F()
{
  {
    init_simple_test("L_BFu1i_F");
    static STRUCT_IF_C L_BFu1i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_F)");
    check_field_offset(lv, v1, 0, "L_BFu1i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_F");
    check_field_offset(lv, v3, 12, "L_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_F, L_BFu1i_F)
//============================================================================


struct  L_BFu1i_I  {
  __tsi64 v1;
  unsigned int v2:1;
  int v3;
};
//SIG(1 L_BFu1i_I) C1{ FL Fi:1 Fi}



static void Test_L_BFu1i_I()
{
  {
    init_simple_test("L_BFu1i_I");
    static STRUCT_IF_C L_BFu1i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_I)");
    check_field_offset(lv, v1, 0, "L_BFu1i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_I");
    check_field_offset(lv, v3, 12, "L_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_I, L_BFu1i_I)
//============================================================================


struct  L_BFu1i_Ip  {
  __tsi64 v1;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 L_BFu1i_Ip) C1{ FL Fi:1 Fp}



static void Test_L_BFu1i_Ip()
{
  {
    init_simple_test("L_BFu1i_Ip");
    static STRUCT_IF_C L_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Ip, L_BFu1i_Ip)
//============================================================================


struct  L_BFu1i_L  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 L_BFu1i_L) C1{ FL Fi:1 FL}



static void Test_L_BFu1i_L()
{
  {
    init_simple_test("L_BFu1i_L");
    static STRUCT_IF_C L_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_L)");
    check_field_offset(lv, v1, 0, "L_BFu1i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_L, L_BFu1i_L)
//============================================================================


struct  L_BFu1i_S  {
  __tsi64 v1;
  unsigned int v2:1;
  short v3;
};
//SIG(1 L_BFu1i_S) C1{ FL Fi:1 Fs}



static void Test_L_BFu1i_S()
{
  {
    init_simple_test("L_BFu1i_S");
    static STRUCT_IF_C L_BFu1i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_S)");
    check_field_offset(lv, v1, 0, "L_BFu1i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_S");
    check_field_offset(lv, v3, 10, "L_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_S, L_BFu1i_S)
//============================================================================


struct  L_BFu1i_Uc  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 L_BFu1i_Uc) C1{ FL Fi:1 Fc}



static void Test_L_BFu1i_Uc()
{
  {
    init_simple_test("L_BFu1i_Uc");
    static STRUCT_IF_C L_BFu1i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Uc");
    check_field_offset(lv, v3, 9, "L_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Uc, L_BFu1i_Uc)
//============================================================================


struct  L_BFu1i_Ui  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 L_BFu1i_Ui) C1{ FL Fi:1 Fi}



static void Test_L_BFu1i_Ui()
{
  {
    init_simple_test("L_BFu1i_Ui");
    static STRUCT_IF_C L_BFu1i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Ui, L_BFu1i_Ui)
//============================================================================


struct  L_BFu1i_Ul  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 L_BFu1i_Ul) C1{ FL Fi:1 FL}



static void Test_L_BFu1i_Ul()
{
  {
    init_simple_test("L_BFu1i_Ul");
    static STRUCT_IF_C L_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Ul, L_BFu1i_Ul)
//============================================================================


struct  L_BFu1i_Us  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 L_BFu1i_Us) C1{ FL Fi:1 Fs}



static void Test_L_BFu1i_Us()
{
  {
    init_simple_test("L_BFu1i_Us");
    static STRUCT_IF_C L_BFu1i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Us");
    check_field_offset(lv, v3, 10, "L_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Us, L_BFu1i_Us)
//============================================================================


struct  L_BFu1i_Vp  {
  __tsi64 v1;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 L_BFu1i_Vp) C1{ FL Fi:1 Fp}



static void Test_L_BFu1i_Vp()
{
  {
    init_simple_test("L_BFu1i_Vp");
    static STRUCT_IF_C L_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu1i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_Vp, L_BFu1i_Vp)
//============================================================================


struct  L_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:1;
};
//SIG(1 L_BFu1ll) C1{ FL FL:1}



static void Test_L_BFu1ll()
{
  {
    init_simple_test("L_BFu1ll");
    static STRUCT_IF_C L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll, L_BFu1ll)
//============================================================================


struct  L_BFu1ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 L_BFu1ll_BFu15i) C1{ FL FL:1 Fi:15}



static void Test_L_BFu1ll_BFu15i()
{
  {
    init_simple_test("L_BFu1ll_BFu15i");
    static STRUCT_IF_C L_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu15i, L_BFu1ll_BFu15i)
//============================================================================


struct  L_BFu1ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 L_BFu1ll_BFu15ll) C1{ FL FL:1 FL:15}



static void Test_L_BFu1ll_BFu15ll()
{
  {
    init_simple_test("L_BFu1ll_BFu15ll");
    static STRUCT_IF_C L_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu15ll, L_BFu1ll_BFu15ll)
//============================================================================


struct  L_BFu1ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 L_BFu1ll_BFu15s) C1{ FL FL:1 Fs:15}



static void Test_L_BFu1ll_BFu15s()
{
  {
    init_simple_test("L_BFu1ll_BFu15s");
    static STRUCT_IF_C L_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu15s, L_BFu1ll_BFu15s)
//============================================================================


struct  L_BFu1ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 L_BFu1ll_BFu16i) C1{ FL FL:1 Fi:16}



static void Test_L_BFu1ll_BFu16i()
{
  {
    init_simple_test("L_BFu1ll_BFu16i");
    static STRUCT_IF_C L_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu16i, L_BFu1ll_BFu16i)
//============================================================================


struct  L_BFu1ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 L_BFu1ll_BFu16ll) C1{ FL FL:1 FL:16}



static void Test_L_BFu1ll_BFu16ll()
{
  {
    init_simple_test("L_BFu1ll_BFu16ll");
    static STRUCT_IF_C L_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu16ll, L_BFu1ll_BFu16ll)
//============================================================================


struct  L_BFu1ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 L_BFu1ll_BFu16s) C1{ FL FL:1 Fs:16}



static void Test_L_BFu1ll_BFu16s()
{
  {
    init_simple_test("L_BFu1ll_BFu16s");
    static STRUCT_IF_C L_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu16s, L_BFu1ll_BFu16s)
//============================================================================


struct  L_BFu1ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 L_BFu1ll_BFu17i) C1{ FL FL:1 Fi:17}



static void Test_L_BFu1ll_BFu17i()
{
  {
    init_simple_test("L_BFu1ll_BFu17i");
    static STRUCT_IF_C L_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu17i, L_BFu1ll_BFu17i)
//============================================================================


struct  L_BFu1ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 L_BFu1ll_BFu17ll) C1{ FL FL:1 FL:17}



static void Test_L_BFu1ll_BFu17ll()
{
  {
    init_simple_test("L_BFu1ll_BFu17ll");
    static STRUCT_IF_C L_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu17ll, L_BFu1ll_BFu17ll)
//============================================================================


struct  L_BFu1ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 L_BFu1ll_BFu1c) C1{ FL FL:1 Fc:1}



static void Test_L_BFu1ll_BFu1c()
{
  {
    init_simple_test("L_BFu1ll_BFu1c");
    static STRUCT_IF_C L_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu1c, L_BFu1ll_BFu1c)
//============================================================================


struct  L_BFu1ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 L_BFu1ll_BFu1i) C1{ FL FL:1 Fi:1}



static void Test_L_BFu1ll_BFu1i()
{
  {
    init_simple_test("L_BFu1ll_BFu1i");
    static STRUCT_IF_C L_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu1i, L_BFu1ll_BFu1i)
//============================================================================


struct  L_BFu1ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 L_BFu1ll_BFu1ll) C1{ FL FL:1 FL:1}



static void Test_L_BFu1ll_BFu1ll()
{
  {
    init_simple_test("L_BFu1ll_BFu1ll");
    static STRUCT_IF_C L_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu1ll, L_BFu1ll_BFu1ll)
//============================================================================


struct  L_BFu1ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 L_BFu1ll_BFu1s) C1{ FL FL:1 Fs:1}



static void Test_L_BFu1ll_BFu1s()
{
  {
    init_simple_test("L_BFu1ll_BFu1s");
    static STRUCT_IF_C L_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu1s, L_BFu1ll_BFu1s)
//============================================================================


struct  L_BFu1ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 L_BFu1ll_BFu31i) C1{ FL FL:1 Fi:31}



static void Test_L_BFu1ll_BFu31i()
{
  {
    init_simple_test("L_BFu1ll_BFu31i");
    static STRUCT_IF_C L_BFu1ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu31i, L_BFu1ll_BFu31i)
//============================================================================


struct  L_BFu1ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 L_BFu1ll_BFu31ll) C1{ FL FL:1 FL:31}



static void Test_L_BFu1ll_BFu31ll()
{
  {
    init_simple_test("L_BFu1ll_BFu31ll");
    static STRUCT_IF_C L_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu31ll, L_BFu1ll_BFu31ll)
//============================================================================


struct  L_BFu1ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 L_BFu1ll_BFu32i) C1{ FL FL:1 Fi:32}



static void Test_L_BFu1ll_BFu32i()
{
  {
    init_simple_test("L_BFu1ll_BFu32i");
    static STRUCT_IF_C L_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu32i, L_BFu1ll_BFu32i)
//============================================================================


struct  L_BFu1ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 L_BFu1ll_BFu32ll) C1{ FL FL:1 FL:32}



static void Test_L_BFu1ll_BFu32ll()
{
  {
    init_simple_test("L_BFu1ll_BFu32ll");
    static STRUCT_IF_C L_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, 1, "L_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, hide_ull(1LL<<31), "L_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu32ll, L_BFu1ll_BFu32ll)
//============================================================================


struct  L_BFu1ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 L_BFu1ll_BFu33) C1{ FL FL:1 FL:33}



static void Test_L_BFu1ll_BFu33()
{
  {
    init_simple_test("L_BFu1ll_BFu33");
    static STRUCT_IF_C L_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, 1, "L_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, hide_ull(1LL<<32), "L_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu33, L_BFu1ll_BFu33)
//============================================================================


struct  L_BFu1ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 L_BFu1ll_BFu7c) C1{ FL FL:1 Fc:7}



static void Test_L_BFu1ll_BFu7c()
{
  {
    init_simple_test("L_BFu1ll_BFu7c");
    static STRUCT_IF_C L_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu7c, L_BFu1ll_BFu7c)
//============================================================================


struct  L_BFu1ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 L_BFu1ll_BFu7i) C1{ FL FL:1 Fi:7}



static void Test_L_BFu1ll_BFu7i()
{
  {
    init_simple_test("L_BFu1ll_BFu7i");
    static STRUCT_IF_C L_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu7i, L_BFu1ll_BFu7i)
//============================================================================


struct  L_BFu1ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 L_BFu1ll_BFu7ll) C1{ FL FL:1 FL:7}



static void Test_L_BFu1ll_BFu7ll()
{
  {
    init_simple_test("L_BFu1ll_BFu7ll");
    static STRUCT_IF_C L_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu7ll, L_BFu1ll_BFu7ll)
//============================================================================


struct  L_BFu1ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 L_BFu1ll_BFu7s) C1{ FL FL:1 Fs:7}



static void Test_L_BFu1ll_BFu7s()
{
  {
    init_simple_test("L_BFu1ll_BFu7s");
    static STRUCT_IF_C L_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu7s, L_BFu1ll_BFu7s)
//============================================================================


struct  L_BFu1ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 L_BFu1ll_BFu8c) C1{ FL FL:1 Fc:8}



static void Test_L_BFu1ll_BFu8c()
{
  {
    init_simple_test("L_BFu1ll_BFu8c");
    static STRUCT_IF_C L_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu8c, L_BFu1ll_BFu8c)
//============================================================================


struct  L_BFu1ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 L_BFu1ll_BFu8i) C1{ FL FL:1 Fi:8}



static void Test_L_BFu1ll_BFu8i()
{
  {
    init_simple_test("L_BFu1ll_BFu8i");
    static STRUCT_IF_C L_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu8i, L_BFu1ll_BFu8i)
//============================================================================


struct  L_BFu1ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 L_BFu1ll_BFu8ll) C1{ FL FL:1 FL:8}



static void Test_L_BFu1ll_BFu8ll()
{
  {
    init_simple_test("L_BFu1ll_BFu8ll");
    static STRUCT_IF_C L_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu8ll, L_BFu1ll_BFu8ll)
//============================================================================


struct  L_BFu1ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 L_BFu1ll_BFu8s) C1{ FL FL:1 Fs:8}



static void Test_L_BFu1ll_BFu8s()
{
  {
    init_simple_test("L_BFu1ll_BFu8s");
    static STRUCT_IF_C L_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu8s, L_BFu1ll_BFu8s)
//============================================================================


struct  L_BFu1ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 L_BFu1ll_BFu9i) C1{ FL FL:1 Fi:9}



static void Test_L_BFu1ll_BFu9i()
{
  {
    init_simple_test("L_BFu1ll_BFu9i");
    static STRUCT_IF_C L_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu9i, L_BFu1ll_BFu9i)
//============================================================================


struct  L_BFu1ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 L_BFu1ll_BFu9ll) C1{ FL FL:1 FL:9}



static void Test_L_BFu1ll_BFu9ll()
{
  {
    init_simple_test("L_BFu1ll_BFu9ll");
    static STRUCT_IF_C L_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu9ll, L_BFu1ll_BFu9ll)
//============================================================================


struct  L_BFu1ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 L_BFu1ll_BFu9s) C1{ FL FL:1 Fs:9}



static void Test_L_BFu1ll_BFu9s()
{
  {
    init_simple_test("L_BFu1ll_BFu9s");
    static STRUCT_IF_C L_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu9s, L_BFu1ll_BFu9s)
//============================================================================


struct  L_BFu1ll_C  {
  __tsi64 v1;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 L_BFu1ll_C) C1{ FL FL:1 Fc}



static void Test_L_BFu1ll_C()
{
  {
    init_simple_test("L_BFu1ll_C");
    static STRUCT_IF_C L_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_C");
    check_field_offset(lv, v3, 9, "L_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_C, L_BFu1ll_C)
//============================================================================


struct  L_BFu1ll_D  {
  __tsi64 v1;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 L_BFu1ll_D) C1{ FL FL:1 FL}



static void Test_L_BFu1ll_D()
{
  {
    init_simple_test("L_BFu1ll_D");
    static STRUCT_IF_C L_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_D, L_BFu1ll_D)
//============================================================================


struct  L_BFu1ll_F  {
  __tsi64 v1;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 L_BFu1ll_F) C1{ FL FL:1 Fi}



static void Test_L_BFu1ll_F()
{
  {
    init_simple_test("L_BFu1ll_F");
    static STRUCT_IF_C L_BFu1ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_F");
    check_field_offset(lv, v3, 12, "L_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_F, L_BFu1ll_F)
//============================================================================


struct  L_BFu1ll_I  {
  __tsi64 v1;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 L_BFu1ll_I) C1{ FL FL:1 Fi}



static void Test_L_BFu1ll_I()
{
  {
    init_simple_test("L_BFu1ll_I");
    static STRUCT_IF_C L_BFu1ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_I");
    check_field_offset(lv, v3, 12, "L_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_I, L_BFu1ll_I)
//============================================================================


struct  L_BFu1ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 L_BFu1ll_Ip) C1{ FL FL:1 Fp}



static void Test_L_BFu1ll_Ip()
{
  {
    init_simple_test("L_BFu1ll_Ip");
    static STRUCT_IF_C L_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Ip, L_BFu1ll_Ip)
//============================================================================


struct  L_BFu1ll_L  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 L_BFu1ll_L) C1{ FL FL:1 FL}



static void Test_L_BFu1ll_L()
{
  {
    init_simple_test("L_BFu1ll_L");
    static STRUCT_IF_C L_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_L, L_BFu1ll_L)
//============================================================================


struct  L_BFu1ll_S  {
  __tsi64 v1;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 L_BFu1ll_S) C1{ FL FL:1 Fs}



static void Test_L_BFu1ll_S()
{
  {
    init_simple_test("L_BFu1ll_S");
    static STRUCT_IF_C L_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_S");
    check_field_offset(lv, v3, 10, "L_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_S, L_BFu1ll_S)
//============================================================================


struct  L_BFu1ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 L_BFu1ll_Uc) C1{ FL FL:1 Fc}



static void Test_L_BFu1ll_Uc()
{
  {
    init_simple_test("L_BFu1ll_Uc");
    static STRUCT_IF_C L_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Uc");
    check_field_offset(lv, v3, 9, "L_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Uc, L_BFu1ll_Uc)
//============================================================================


struct  L_BFu1ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 L_BFu1ll_Ui) C1{ FL FL:1 Fi}



static void Test_L_BFu1ll_Ui()
{
  {
    init_simple_test("L_BFu1ll_Ui");
    static STRUCT_IF_C L_BFu1ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Ui, L_BFu1ll_Ui)
//============================================================================


struct  L_BFu1ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 L_BFu1ll_Ul) C1{ FL FL:1 FL}



static void Test_L_BFu1ll_Ul()
{
  {
    init_simple_test("L_BFu1ll_Ul");
    static STRUCT_IF_C L_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Ul, L_BFu1ll_Ul)
//============================================================================


struct  L_BFu1ll_Us  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 L_BFu1ll_Us) C1{ FL FL:1 Fs}



static void Test_L_BFu1ll_Us()
{
  {
    init_simple_test("L_BFu1ll_Us");
    static STRUCT_IF_C L_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Us, L_BFu1ll_Us)
//============================================================================


struct  L_BFu1ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 L_BFu1ll_Vp) C1{ FL FL:1 Fp}



static void Test_L_BFu1ll_Vp()
{
  {
    init_simple_test("L_BFu1ll_Vp");
    static STRUCT_IF_C L_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_Vp, L_BFu1ll_Vp)
//============================================================================


struct  L_BFu1s  {
  __tsi64 v1;
  unsigned short v2:1;
};
//SIG(1 L_BFu1s) C1{ FL Fs:1}



static void Test_L_BFu1s()
{
  {
    init_simple_test("L_BFu1s");
    static STRUCT_IF_C L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s, L_BFu1s)
//============================================================================


struct  L_BFu1s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 L_BFu1s_BFu15i) C1{ FL Fs:1 Fi:15}



static void Test_L_BFu1s_BFu15i()
{
  {
    init_simple_test("L_BFu1s_BFu15i");
    static STRUCT_IF_C L_BFu1s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu15i, L_BFu1s_BFu15i)
//============================================================================


struct  L_BFu1s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 L_BFu1s_BFu15ll) C1{ FL Fs:1 FL:15}



static void Test_L_BFu1s_BFu15ll()
{
  {
    init_simple_test("L_BFu1s_BFu15ll");
    static STRUCT_IF_C L_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu15ll, L_BFu1s_BFu15ll)
//============================================================================


struct  L_BFu1s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 L_BFu1s_BFu15s) C1{ FL Fs:1 Fs:15}



static void Test_L_BFu1s_BFu15s()
{
  {
    init_simple_test("L_BFu1s_BFu15s");
    static STRUCT_IF_C L_BFu1s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, 1, "L_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 8, 1, 15, hide_ull(1LL<<14), "L_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu15s, L_BFu1s_BFu15s)
//============================================================================


struct  L_BFu1s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 L_BFu1s_BFu16i) C1{ FL Fs:1 Fi:16}



static void Test_L_BFu1s_BFu16i()
{
  {
    init_simple_test("L_BFu1s_BFu16i");
    static STRUCT_IF_C L_BFu1s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu16i, L_BFu1s_BFu16i)
//============================================================================


struct  L_BFu1s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 L_BFu1s_BFu16ll) C1{ FL Fs:1 FL:16}



static void Test_L_BFu1s_BFu16ll()
{
  {
    init_simple_test("L_BFu1s_BFu16ll");
    static STRUCT_IF_C L_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, 1, "L_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 8, 1, 16, hide_ull(1LL<<15), "L_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu16ll, L_BFu1s_BFu16ll)
//============================================================================


struct  L_BFu1s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 L_BFu1s_BFu16s) C1{ FL Fs:1 Fs:16}



static void Test_L_BFu1s_BFu16s()
{
  {
    init_simple_test("L_BFu1s_BFu16s");
    static STRUCT_IF_C L_BFu1s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu16s, L_BFu1s_BFu16s)
//============================================================================


struct  L_BFu1s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 L_BFu1s_BFu17i) C1{ FL Fs:1 Fi:17}



static void Test_L_BFu1s_BFu17i()
{
  {
    init_simple_test("L_BFu1s_BFu17i");
    static STRUCT_IF_C L_BFu1s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu17i, L_BFu1s_BFu17i)
//============================================================================


struct  L_BFu1s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 L_BFu1s_BFu17ll) C1{ FL Fs:1 FL:17}



static void Test_L_BFu1s_BFu17ll()
{
  {
    init_simple_test("L_BFu1s_BFu17ll");
    static STRUCT_IF_C L_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, 1, "L_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 8, 1, 17, hide_ull(1LL<<16), "L_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu17ll, L_BFu1s_BFu17ll)
//============================================================================


struct  L_BFu1s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 L_BFu1s_BFu1c) C1{ FL Fs:1 Fc:1}



static void Test_L_BFu1s_BFu1c()
{
  {
    init_simple_test("L_BFu1s_BFu1c");
    static STRUCT_IF_C L_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu1c, L_BFu1s_BFu1c)
//============================================================================


struct  L_BFu1s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 L_BFu1s_BFu1i) C1{ FL Fs:1 Fi:1}



static void Test_L_BFu1s_BFu1i()
{
  {
    init_simple_test("L_BFu1s_BFu1i");
    static STRUCT_IF_C L_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu1i, L_BFu1s_BFu1i)
//============================================================================


struct  L_BFu1s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 L_BFu1s_BFu1ll) C1{ FL Fs:1 FL:1}



static void Test_L_BFu1s_BFu1ll()
{
  {
    init_simple_test("L_BFu1s_BFu1ll");
    static STRUCT_IF_C L_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu1ll, L_BFu1s_BFu1ll)
//============================================================================


struct  L_BFu1s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 L_BFu1s_BFu1s) C1{ FL Fs:1 Fs:1}



static void Test_L_BFu1s_BFu1s()
{
  {
    init_simple_test("L_BFu1s_BFu1s");
    static STRUCT_IF_C L_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 8, 1, 1, 1, "L_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu1s, L_BFu1s_BFu1s)
//============================================================================


struct  L_BFu1s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 L_BFu1s_BFu31i) C1{ FL Fs:1 Fi:31}



static void Test_L_BFu1s_BFu31i()
{
  {
    init_simple_test("L_BFu1s_BFu31i");
    static STRUCT_IF_C L_BFu1s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu31i, L_BFu1s_BFu31i)
//============================================================================


struct  L_BFu1s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 L_BFu1s_BFu31ll) C1{ FL Fs:1 FL:31}



static void Test_L_BFu1s_BFu31ll()
{
  {
    init_simple_test("L_BFu1s_BFu31ll");
    static STRUCT_IF_C L_BFu1s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, 1, "L_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 8, 1, 31, hide_ull(1LL<<30), "L_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu31ll, L_BFu1s_BFu31ll)
//============================================================================


struct  L_BFu1s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 L_BFu1s_BFu32i) C1{ FL Fs:1 Fi:32}



static void Test_L_BFu1s_BFu32i()
{
  {
    init_simple_test("L_BFu1s_BFu32i");
    static STRUCT_IF_C L_BFu1s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu32i, L_BFu1s_BFu32i)
//============================================================================


struct  L_BFu1s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 L_BFu1s_BFu32ll) C1{ FL Fs:1 FL:32}



static void Test_L_BFu1s_BFu32ll()
{
  {
    init_simple_test("L_BFu1s_BFu32ll");
    static STRUCT_IF_C L_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, 1, "L_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 8, 1, 32, hide_ull(1LL<<31), "L_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu32ll, L_BFu1s_BFu32ll)
//============================================================================


struct  L_BFu1s_BFu33  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 L_BFu1s_BFu33) C1{ FL Fs:1 FL:33}



static void Test_L_BFu1s_BFu33()
{
  {
    init_simple_test("L_BFu1s_BFu33");
    static STRUCT_IF_C L_BFu1s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, 1, "L_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 8, 1, 33, hide_ull(1LL<<32), "L_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu33, L_BFu1s_BFu33)
//============================================================================


struct  L_BFu1s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 L_BFu1s_BFu7c) C1{ FL Fs:1 Fc:7}



static void Test_L_BFu1s_BFu7c()
{
  {
    init_simple_test("L_BFu1s_BFu7c");
    static STRUCT_IF_C L_BFu1s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu7c, L_BFu1s_BFu7c)
//============================================================================


struct  L_BFu1s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 L_BFu1s_BFu7i) C1{ FL Fs:1 Fi:7}



static void Test_L_BFu1s_BFu7i()
{
  {
    init_simple_test("L_BFu1s_BFu7i");
    static STRUCT_IF_C L_BFu1s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu7i, L_BFu1s_BFu7i)
//============================================================================


struct  L_BFu1s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 L_BFu1s_BFu7ll) C1{ FL Fs:1 FL:7}



static void Test_L_BFu1s_BFu7ll()
{
  {
    init_simple_test("L_BFu1s_BFu7ll");
    static STRUCT_IF_C L_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu7ll, L_BFu1s_BFu7ll)
//============================================================================


struct  L_BFu1s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 L_BFu1s_BFu7s) C1{ FL Fs:1 Fs:7}



static void Test_L_BFu1s_BFu7s()
{
  {
    init_simple_test("L_BFu1s_BFu7s");
    static STRUCT_IF_C L_BFu1s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, 1, "L_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 8, 1, 7, hide_ull(1LL<<6), "L_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu7s, L_BFu1s_BFu7s)
//============================================================================


struct  L_BFu1s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 L_BFu1s_BFu8c) C1{ FL Fs:1 Fc:8}



static void Test_L_BFu1s_BFu8c()
{
  {
    init_simple_test("L_BFu1s_BFu8c");
    static STRUCT_IF_C L_BFu1s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu8c, L_BFu1s_BFu8c)
//============================================================================


struct  L_BFu1s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 L_BFu1s_BFu8i) C1{ FL Fs:1 Fi:8}



static void Test_L_BFu1s_BFu8i()
{
  {
    init_simple_test("L_BFu1s_BFu8i");
    static STRUCT_IF_C L_BFu1s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu8i, L_BFu1s_BFu8i)
//============================================================================


struct  L_BFu1s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 L_BFu1s_BFu8ll) C1{ FL Fs:1 FL:8}



static void Test_L_BFu1s_BFu8ll()
{
  {
    init_simple_test("L_BFu1s_BFu8ll");
    static STRUCT_IF_C L_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu8ll, L_BFu1s_BFu8ll)
//============================================================================


struct  L_BFu1s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 L_BFu1s_BFu8s) C1{ FL Fs:1 Fs:8}



static void Test_L_BFu1s_BFu8s()
{
  {
    init_simple_test("L_BFu1s_BFu8s");
    static STRUCT_IF_C L_BFu1s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, 1, "L_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 8, 1, 8, hide_ull(1LL<<7), "L_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu8s, L_BFu1s_BFu8s)
//============================================================================


struct  L_BFu1s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 L_BFu1s_BFu9i) C1{ FL Fs:1 Fi:9}



static void Test_L_BFu1s_BFu9i()
{
  {
    init_simple_test("L_BFu1s_BFu9i");
    static STRUCT_IF_C L_BFu1s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu9i, L_BFu1s_BFu9i)
//============================================================================


struct  L_BFu1s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 L_BFu1s_BFu9ll) C1{ FL Fs:1 FL:9}



static void Test_L_BFu1s_BFu9ll()
{
  {
    init_simple_test("L_BFu1s_BFu9ll");
    static STRUCT_IF_C L_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu9ll, L_BFu1s_BFu9ll)
//============================================================================


struct  L_BFu1s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 L_BFu1s_BFu9s) C1{ FL Fs:1 Fs:9}



static void Test_L_BFu1s_BFu9s()
{
  {
    init_simple_test("L_BFu1s_BFu9s");
    static STRUCT_IF_C L_BFu1s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, 1, "L_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 8, 1, 9, hide_ull(1LL<<8), "L_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu9s, L_BFu1s_BFu9s)
//============================================================================


struct  L_BFu1s_C  {
  __tsi64 v1;
  unsigned short v2:1;
  char v3;
};
//SIG(1 L_BFu1s_C) C1{ FL Fs:1 Fc}



static void Test_L_BFu1s_C()
{
  {
    init_simple_test("L_BFu1s_C");
    static STRUCT_IF_C L_BFu1s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_C)");
    check_field_offset(lv, v1, 0, "L_BFu1s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_C");
    check_field_offset(lv, v3, 9, "L_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_C, L_BFu1s_C)
//============================================================================


struct  L_BFu1s_D  {
  __tsi64 v1;
  unsigned short v2:1;
  double v3;
};
//SIG(1 L_BFu1s_D) C1{ FL Fs:1 FL}



static void Test_L_BFu1s_D()
{
  {
    init_simple_test("L_BFu1s_D");
    static STRUCT_IF_C L_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_D)");
    check_field_offset(lv, v1, 0, "L_BFu1s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_D, L_BFu1s_D)
//============================================================================


struct  L_BFu1s_F  {
  __tsi64 v1;
  unsigned short v2:1;
  float v3;
};
//SIG(1 L_BFu1s_F) C1{ FL Fs:1 Fi}



static void Test_L_BFu1s_F()
{
  {
    init_simple_test("L_BFu1s_F");
    static STRUCT_IF_C L_BFu1s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_F)");
    check_field_offset(lv, v1, 0, "L_BFu1s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_F");
    check_field_offset(lv, v3, 12, "L_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_F, L_BFu1s_F)
//============================================================================


struct  L_BFu1s_I  {
  __tsi64 v1;
  unsigned short v2:1;
  int v3;
};
//SIG(1 L_BFu1s_I) C1{ FL Fs:1 Fi}



static void Test_L_BFu1s_I()
{
  {
    init_simple_test("L_BFu1s_I");
    static STRUCT_IF_C L_BFu1s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_I)");
    check_field_offset(lv, v1, 0, "L_BFu1s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_I");
    check_field_offset(lv, v3, 12, "L_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_I, L_BFu1s_I)
//============================================================================


struct  L_BFu1s_Ip  {
  __tsi64 v1;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 L_BFu1s_Ip) C1{ FL Fs:1 Fp}



static void Test_L_BFu1s_Ip()
{
  {
    init_simple_test("L_BFu1s_Ip");
    static STRUCT_IF_C L_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Ip, L_BFu1s_Ip)
//============================================================================


struct  L_BFu1s_L  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 L_BFu1s_L) C1{ FL Fs:1 FL}



static void Test_L_BFu1s_L()
{
  {
    init_simple_test("L_BFu1s_L");
    static STRUCT_IF_C L_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_L)");
    check_field_offset(lv, v1, 0, "L_BFu1s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_L, L_BFu1s_L)
//============================================================================


struct  L_BFu1s_S  {
  __tsi64 v1;
  unsigned short v2:1;
  short v3;
};
//SIG(1 L_BFu1s_S) C1{ FL Fs:1 Fs}



static void Test_L_BFu1s_S()
{
  {
    init_simple_test("L_BFu1s_S");
    static STRUCT_IF_C L_BFu1s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_S)");
    check_field_offset(lv, v1, 0, "L_BFu1s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_S");
    check_field_offset(lv, v3, 10, "L_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_S, L_BFu1s_S)
//============================================================================


struct  L_BFu1s_Uc  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 L_BFu1s_Uc) C1{ FL Fs:1 Fc}



static void Test_L_BFu1s_Uc()
{
  {
    init_simple_test("L_BFu1s_Uc");
    static STRUCT_IF_C L_BFu1s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Uc");
    check_field_offset(lv, v3, 9, "L_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Uc, L_BFu1s_Uc)
//============================================================================


struct  L_BFu1s_Ui  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 L_BFu1s_Ui) C1{ FL Fs:1 Fi}



static void Test_L_BFu1s_Ui()
{
  {
    init_simple_test("L_BFu1s_Ui");
    static STRUCT_IF_C L_BFu1s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu1s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Ui, L_BFu1s_Ui)
//============================================================================


struct  L_BFu1s_Ul  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 L_BFu1s_Ul) C1{ FL Fs:1 FL}



static void Test_L_BFu1s_Ul()
{
  {
    init_simple_test("L_BFu1s_Ul");
    static STRUCT_IF_C L_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Ul, L_BFu1s_Ul)
//============================================================================


struct  L_BFu1s_Us  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 L_BFu1s_Us) C1{ FL Fs:1 Fs}



static void Test_L_BFu1s_Us()
{
  {
    init_simple_test("L_BFu1s_Us");
    static STRUCT_IF_C L_BFu1s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Us");
    check_field_offset(lv, v3, 10, "L_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Us, L_BFu1s_Us)
//============================================================================


struct  L_BFu1s_Vp  {
  __tsi64 v1;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 L_BFu1s_Vp) C1{ FL Fs:1 Fp}



static void Test_L_BFu1s_Vp()
{
  {
    init_simple_test("L_BFu1s_Vp");
    static STRUCT_IF_C L_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu1s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_Vp, L_BFu1s_Vp)
//============================================================================


struct  L_BFu31i  {
  __tsi64 v1;
  unsigned int v2:31;
};
//SIG(1 L_BFu31i) C1{ FL Fi:31}



static void Test_L_BFu31i()
{
  {
    init_simple_test("L_BFu31i");
    static STRUCT_IF_C L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i, L_BFu31i)
//============================================================================


struct  L_BFu31i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 L_BFu31i_BFu15i) C1{ FL Fi:31 Fi:15}



static void Test_L_BFu31i_BFu15i()
{
  {
    init_simple_test("L_BFu31i_BFu15i");
    static STRUCT_IF_C L_BFu31i_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu15i, L_BFu31i_BFu15i)
//============================================================================


struct  L_BFu31i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 L_BFu31i_BFu15ll) C1{ FL Fi:31 FL:15}



static void Test_L_BFu31i_BFu15ll()
{
  {
    init_simple_test("L_BFu31i_BFu15ll");
    static STRUCT_IF_C L_BFu31i_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, 11, 7, 15, 1, "L_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, 11, 7, 15, hide_ull(1LL<<14), "L_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu15ll, L_BFu31i_BFu15ll)
//============================================================================


struct  L_BFu31i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 L_BFu31i_BFu15s) C1{ FL Fi:31 Fs:15}



static void Test_L_BFu31i_BFu15s()
{
  {
    init_simple_test("L_BFu31i_BFu15s");
    static STRUCT_IF_C L_BFu31i_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu15s, L_BFu31i_BFu15s)
//============================================================================


struct  L_BFu31i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 L_BFu31i_BFu16i) C1{ FL Fi:31 Fi:16}



static void Test_L_BFu31i_BFu16i()
{
  {
    init_simple_test("L_BFu31i_BFu16i");
    static STRUCT_IF_C L_BFu31i_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu16i, L_BFu31i_BFu16i)
//============================================================================


struct  L_BFu31i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 L_BFu31i_BFu16ll) C1{ FL Fi:31 FL:16}



static void Test_L_BFu31i_BFu16ll()
{
  {
    init_simple_test("L_BFu31i_BFu16ll");
    static STRUCT_IF_C L_BFu31i_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, 11, 7, 16, 1, "L_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, 11, 7, 16, hide_ull(1LL<<15), "L_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu16ll, L_BFu31i_BFu16ll)
//============================================================================


struct  L_BFu31i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 L_BFu31i_BFu16s) C1{ FL Fi:31 Fs:16}



static void Test_L_BFu31i_BFu16s()
{
  {
    init_simple_test("L_BFu31i_BFu16s");
    static STRUCT_IF_C L_BFu31i_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu16s, L_BFu31i_BFu16s)
//============================================================================


struct  L_BFu31i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 L_BFu31i_BFu17i) C1{ FL Fi:31 Fi:17}



static void Test_L_BFu31i_BFu17i()
{
  {
    init_simple_test("L_BFu31i_BFu17i");
    static STRUCT_IF_C L_BFu31i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu17i, L_BFu31i_BFu17i)
//============================================================================


struct  L_BFu31i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 L_BFu31i_BFu17ll) C1{ FL Fi:31 FL:17}



static void Test_L_BFu31i_BFu17ll()
{
  {
    init_simple_test("L_BFu31i_BFu17ll");
    static STRUCT_IF_C L_BFu31i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, 11, 7, 17, 1, "L_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, 11, 7, 17, hide_ull(1LL<<16), "L_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu17ll, L_BFu31i_BFu17ll)
//============================================================================


struct  L_BFu31i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 L_BFu31i_BFu1c) C1{ FL Fi:31 Fc:1}



static void Test_L_BFu31i_BFu1c()
{
  {
    init_simple_test("L_BFu31i_BFu1c");
    static STRUCT_IF_C L_BFu31i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu1c, L_BFu31i_BFu1c)
//============================================================================


struct  L_BFu31i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 L_BFu31i_BFu1i) C1{ FL Fi:31 Fi:1}



static void Test_L_BFu31i_BFu1i()
{
  {
    init_simple_test("L_BFu31i_BFu1i");
    static STRUCT_IF_C L_BFu31i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu1i, L_BFu31i_BFu1i)
//============================================================================


struct  L_BFu31i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 L_BFu31i_BFu1ll) C1{ FL Fi:31 FL:1}



static void Test_L_BFu31i_BFu1ll()
{
  {
    init_simple_test("L_BFu31i_BFu1ll");
    static STRUCT_IF_C L_BFu31i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu1ll, L_BFu31i_BFu1ll)
//============================================================================


struct  L_BFu31i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 L_BFu31i_BFu1s) C1{ FL Fi:31 Fs:1}



static void Test_L_BFu31i_BFu1s()
{
  {
    init_simple_test("L_BFu31i_BFu1s");
    static STRUCT_IF_C L_BFu31i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu1s, L_BFu31i_BFu1s)
//============================================================================


struct  L_BFu31i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 L_BFu31i_BFu31i) C1{ FL Fi:31 Fi:31}



static void Test_L_BFu31i_BFu31i()
{
  {
    init_simple_test("L_BFu31i_BFu31i");
    static STRUCT_IF_C L_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu31i, L_BFu31i_BFu31i)
//============================================================================


struct  L_BFu31i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 L_BFu31i_BFu31ll) C1{ FL Fi:31 FL:31}



static void Test_L_BFu31i_BFu31ll()
{
  {
    init_simple_test("L_BFu31i_BFu31ll");
    static STRUCT_IF_C L_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 11, 7, 31, 1, "L_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 11, 7, 31, hide_ull(1LL<<30), "L_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu31ll, L_BFu31i_BFu31ll)
//============================================================================


struct  L_BFu31i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 L_BFu31i_BFu32i) C1{ FL Fi:31 Fi:32}



static void Test_L_BFu31i_BFu32i()
{
  {
    init_simple_test("L_BFu31i_BFu32i");
    static STRUCT_IF_C L_BFu31i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu32i, L_BFu31i_BFu32i)
//============================================================================


struct  L_BFu31i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 L_BFu31i_BFu32ll) C1{ FL Fi:31 FL:32}



static void Test_L_BFu31i_BFu32ll()
{
  {
    init_simple_test("L_BFu31i_BFu32ll");
    static STRUCT_IF_C L_BFu31i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, 11, 7, 32, 1, "L_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, 11, 7, 32, hide_ull(1LL<<31), "L_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu32ll, L_BFu31i_BFu32ll)
//============================================================================


struct  L_BFu31i_BFu33  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 L_BFu31i_BFu33) C1{ FL Fi:31 FL:33}



static void Test_L_BFu31i_BFu33()
{
  {
    init_simple_test("L_BFu31i_BFu33");
    static STRUCT_IF_C L_BFu31i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu33");
    set_bf_and_test(lv, v3, 11, 7, 33, 1, "L_BFu31i_BFu33");
    set_bf_and_test(lv, v3, 11, 7, 33, hide_ull(1LL<<32), "L_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu33, L_BFu31i_BFu33)
//============================================================================


struct  L_BFu31i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 L_BFu31i_BFu7c) C1{ FL Fi:31 Fc:7}



static void Test_L_BFu31i_BFu7c()
{
  {
    init_simple_test("L_BFu31i_BFu7c");
    static STRUCT_IF_C L_BFu31i_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu7c, L_BFu31i_BFu7c)
//============================================================================


struct  L_BFu31i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 L_BFu31i_BFu7i) C1{ FL Fi:31 Fi:7}



static void Test_L_BFu31i_BFu7i()
{
  {
    init_simple_test("L_BFu31i_BFu7i");
    static STRUCT_IF_C L_BFu31i_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu7i, L_BFu31i_BFu7i)
//============================================================================


struct  L_BFu31i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 L_BFu31i_BFu7ll) C1{ FL Fi:31 FL:7}



static void Test_L_BFu31i_BFu7ll()
{
  {
    init_simple_test("L_BFu31i_BFu7ll");
    static STRUCT_IF_C L_BFu31i_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, 11, 7, 7, 1, "L_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, 11, 7, 7, hide_ull(1LL<<6), "L_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu7ll, L_BFu31i_BFu7ll)
//============================================================================


struct  L_BFu31i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 L_BFu31i_BFu7s) C1{ FL Fi:31 Fs:7}



static void Test_L_BFu31i_BFu7s()
{
  {
    init_simple_test("L_BFu31i_BFu7s");
    static STRUCT_IF_C L_BFu31i_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu7s, L_BFu31i_BFu7s)
//============================================================================


struct  L_BFu31i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 L_BFu31i_BFu8c) C1{ FL Fi:31 Fc:8}



static void Test_L_BFu31i_BFu8c()
{
  {
    init_simple_test("L_BFu31i_BFu8c");
    static STRUCT_IF_C L_BFu31i_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu8c, L_BFu31i_BFu8c)
//============================================================================


struct  L_BFu31i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 L_BFu31i_BFu8i) C1{ FL Fi:31 Fi:8}



static void Test_L_BFu31i_BFu8i()
{
  {
    init_simple_test("L_BFu31i_BFu8i");
    static STRUCT_IF_C L_BFu31i_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu8i, L_BFu31i_BFu8i)
//============================================================================


struct  L_BFu31i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 L_BFu31i_BFu8ll) C1{ FL Fi:31 FL:8}



static void Test_L_BFu31i_BFu8ll()
{
  {
    init_simple_test("L_BFu31i_BFu8ll");
    static STRUCT_IF_C L_BFu31i_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, 11, 7, 8, 1, "L_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, 11, 7, 8, hide_ull(1LL<<7), "L_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu8ll, L_BFu31i_BFu8ll)
//============================================================================


struct  L_BFu31i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 L_BFu31i_BFu8s) C1{ FL Fi:31 Fs:8}



static void Test_L_BFu31i_BFu8s()
{
  {
    init_simple_test("L_BFu31i_BFu8s");
    static STRUCT_IF_C L_BFu31i_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu8s, L_BFu31i_BFu8s)
//============================================================================


struct  L_BFu31i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 L_BFu31i_BFu9i) C1{ FL Fi:31 Fi:9}



static void Test_L_BFu31i_BFu9i()
{
  {
    init_simple_test("L_BFu31i_BFu9i");
    static STRUCT_IF_C L_BFu31i_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu9i, L_BFu31i_BFu9i)
//============================================================================


struct  L_BFu31i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 L_BFu31i_BFu9ll) C1{ FL Fi:31 FL:9}



static void Test_L_BFu31i_BFu9ll()
{
  {
    init_simple_test("L_BFu31i_BFu9ll");
    static STRUCT_IF_C L_BFu31i_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, 11, 7, 9, 1, "L_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, 11, 7, 9, hide_ull(1LL<<8), "L_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu9ll, L_BFu31i_BFu9ll)
//============================================================================


struct  L_BFu31i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 L_BFu31i_BFu9s) C1{ FL Fi:31 Fs:9}



static void Test_L_BFu31i_BFu9s()
{
  {
    init_simple_test("L_BFu31i_BFu9s");
    static STRUCT_IF_C L_BFu31i_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu9s, L_BFu31i_BFu9s)
//============================================================================


struct  L_BFu31i_C  {
  __tsi64 v1;
  unsigned int v2:31;
  char v3;
};
//SIG(1 L_BFu31i_C) C1{ FL Fi:31 Fc}



static void Test_L_BFu31i_C()
{
  {
    init_simple_test("L_BFu31i_C");
    static STRUCT_IF_C L_BFu31i_C lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_C)");
    check_field_offset(lv, v1, 0, "L_BFu31i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_C");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_C");
    check_field_offset(lv, v3, 12, "L_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_C, L_BFu31i_C)
//============================================================================


struct  L_BFu31i_D  {
  __tsi64 v1;
  unsigned int v2:31;
  double v3;
};
//SIG(1 L_BFu31i_D) C1{ FL Fi:31 FL}



static void Test_L_BFu31i_D()
{
  {
    init_simple_test("L_BFu31i_D");
    static STRUCT_IF_C L_BFu31i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_D)");
    check_field_offset(lv, v1, 0, "L_BFu31i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_D");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_D, L_BFu31i_D)
//============================================================================


struct  L_BFu31i_F  {
  __tsi64 v1;
  unsigned int v2:31;
  float v3;
};
//SIG(1 L_BFu31i_F) C1{ FL Fi:31 Fi}



static void Test_L_BFu31i_F()
{
  {
    init_simple_test("L_BFu31i_F");
    static STRUCT_IF_C L_BFu31i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_F)");
    check_field_offset(lv, v1, 0, "L_BFu31i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_F");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_F");
    check_field_offset(lv, v3, 12, "L_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_F, L_BFu31i_F)
//============================================================================


struct  L_BFu31i_I  {
  __tsi64 v1;
  unsigned int v2:31;
  int v3;
};
//SIG(1 L_BFu31i_I) C1{ FL Fi:31 Fi}



static void Test_L_BFu31i_I()
{
  {
    init_simple_test("L_BFu31i_I");
    static STRUCT_IF_C L_BFu31i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_I)");
    check_field_offset(lv, v1, 0, "L_BFu31i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_I");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_I");
    check_field_offset(lv, v3, 12, "L_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_I, L_BFu31i_I)
//============================================================================


struct  L_BFu31i_Ip  {
  __tsi64 v1;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 L_BFu31i_Ip) C1{ FL Fi:31 Fp}



static void Test_L_BFu31i_Ip()
{
  {
    init_simple_test("L_BFu31i_Ip");
    static STRUCT_IF_C L_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Ip, L_BFu31i_Ip)
//============================================================================


struct  L_BFu31i_L  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 L_BFu31i_L) C1{ FL Fi:31 FL}



static void Test_L_BFu31i_L()
{
  {
    init_simple_test("L_BFu31i_L");
    static STRUCT_IF_C L_BFu31i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_L)");
    check_field_offset(lv, v1, 0, "L_BFu31i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_L");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_L, L_BFu31i_L)
//============================================================================


struct  L_BFu31i_S  {
  __tsi64 v1;
  unsigned int v2:31;
  short v3;
};
//SIG(1 L_BFu31i_S) C1{ FL Fi:31 Fs}



static void Test_L_BFu31i_S()
{
  {
    init_simple_test("L_BFu31i_S");
    static STRUCT_IF_C L_BFu31i_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_S)");
    check_field_offset(lv, v1, 0, "L_BFu31i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_S");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_S");
    check_field_offset(lv, v3, 12, "L_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_S, L_BFu31i_S)
//============================================================================


struct  L_BFu31i_Uc  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 L_BFu31i_Uc) C1{ FL Fi:31 Fc}



static void Test_L_BFu31i_Uc()
{
  {
    init_simple_test("L_BFu31i_Uc");
    static STRUCT_IF_C L_BFu31i_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Uc");
    check_field_offset(lv, v3, 12, "L_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Uc, L_BFu31i_Uc)
//============================================================================


struct  L_BFu31i_Ui  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 L_BFu31i_Ui) C1{ FL Fi:31 Fi}



static void Test_L_BFu31i_Ui()
{
  {
    init_simple_test("L_BFu31i_Ui");
    static STRUCT_IF_C L_BFu31i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Ui, L_BFu31i_Ui)
//============================================================================


struct  L_BFu31i_Ul  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 L_BFu31i_Ul) C1{ FL Fi:31 FL}



static void Test_L_BFu31i_Ul()
{
  {
    init_simple_test("L_BFu31i_Ul");
    static STRUCT_IF_C L_BFu31i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Ul, L_BFu31i_Ul)
//============================================================================


struct  L_BFu31i_Us  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 L_BFu31i_Us) C1{ FL Fi:31 Fs}



static void Test_L_BFu31i_Us()
{
  {
    init_simple_test("L_BFu31i_Us");
    static STRUCT_IF_C L_BFu31i_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Us");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Us");
    check_field_offset(lv, v3, 12, "L_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Us, L_BFu31i_Us)
//============================================================================


struct  L_BFu31i_Vp  {
  __tsi64 v1;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 L_BFu31i_Vp) C1{ FL Fi:31 Fp}



static void Test_L_BFu31i_Vp()
{
  {
    init_simple_test("L_BFu31i_Vp");
    static STRUCT_IF_C L_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu31i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_Vp, L_BFu31i_Vp)
//============================================================================


struct  L_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:31;
};
//SIG(1 L_BFu31ll) C1{ FL FL:31}



static void Test_L_BFu31ll()
{
  {
    init_simple_test("L_BFu31ll");
    static STRUCT_IF_C L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll, L_BFu31ll)
//============================================================================


struct  L_BFu31ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 L_BFu31ll_BFu15i) C1{ FL FL:31 Fi:15}



static void Test_L_BFu31ll_BFu15i()
{
  {
    init_simple_test("L_BFu31ll_BFu15i");
    static STRUCT_IF_C L_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu15i, L_BFu31ll_BFu15i)
//============================================================================


struct  L_BFu31ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 L_BFu31ll_BFu15ll) C1{ FL FL:31 FL:15}



static void Test_L_BFu31ll_BFu15ll()
{
  {
    init_simple_test("L_BFu31ll_BFu15ll");
    static STRUCT_IF_C L_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 11, 7, 15, 1, "L_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 11, 7, 15, hide_ull(1LL<<14), "L_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu15ll, L_BFu31ll_BFu15ll)
//============================================================================


struct  L_BFu31ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 L_BFu31ll_BFu15s) C1{ FL FL:31 Fs:15}



static void Test_L_BFu31ll_BFu15s()
{
  {
    init_simple_test("L_BFu31ll_BFu15s");
    static STRUCT_IF_C L_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu15s, L_BFu31ll_BFu15s)
//============================================================================


struct  L_BFu31ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 L_BFu31ll_BFu16i) C1{ FL FL:31 Fi:16}



static void Test_L_BFu31ll_BFu16i()
{
  {
    init_simple_test("L_BFu31ll_BFu16i");
    static STRUCT_IF_C L_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu16i, L_BFu31ll_BFu16i)
//============================================================================


struct  L_BFu31ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 L_BFu31ll_BFu16ll) C1{ FL FL:31 FL:16}



static void Test_L_BFu31ll_BFu16ll()
{
  {
    init_simple_test("L_BFu31ll_BFu16ll");
    static STRUCT_IF_C L_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 11, 7, 16, 1, "L_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 11, 7, 16, hide_ull(1LL<<15), "L_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu16ll, L_BFu31ll_BFu16ll)
//============================================================================


struct  L_BFu31ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 L_BFu31ll_BFu16s) C1{ FL FL:31 Fs:16}



static void Test_L_BFu31ll_BFu16s()
{
  {
    init_simple_test("L_BFu31ll_BFu16s");
    static STRUCT_IF_C L_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu16s, L_BFu31ll_BFu16s)
//============================================================================


struct  L_BFu31ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 L_BFu31ll_BFu17i) C1{ FL FL:31 Fi:17}



static void Test_L_BFu31ll_BFu17i()
{
  {
    init_simple_test("L_BFu31ll_BFu17i");
    static STRUCT_IF_C L_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu17i, L_BFu31ll_BFu17i)
//============================================================================


struct  L_BFu31ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 L_BFu31ll_BFu17ll) C1{ FL FL:31 FL:17}



static void Test_L_BFu31ll_BFu17ll()
{
  {
    init_simple_test("L_BFu31ll_BFu17ll");
    static STRUCT_IF_C L_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 11, 7, 17, 1, "L_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 11, 7, 17, hide_ull(1LL<<16), "L_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu17ll, L_BFu31ll_BFu17ll)
//============================================================================


struct  L_BFu31ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 L_BFu31ll_BFu1c) C1{ FL FL:31 Fc:1}



static void Test_L_BFu31ll_BFu1c()
{
  {
    init_simple_test("L_BFu31ll_BFu1c");
    static STRUCT_IF_C L_BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu1c, L_BFu31ll_BFu1c)
//============================================================================


struct  L_BFu31ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 L_BFu31ll_BFu1i) C1{ FL FL:31 Fi:1}



static void Test_L_BFu31ll_BFu1i()
{
  {
    init_simple_test("L_BFu31ll_BFu1i");
    static STRUCT_IF_C L_BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu1i, L_BFu31ll_BFu1i)
//============================================================================


struct  L_BFu31ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 L_BFu31ll_BFu1ll) C1{ FL FL:31 FL:1}



static void Test_L_BFu31ll_BFu1ll()
{
  {
    init_simple_test("L_BFu31ll_BFu1ll");
    static STRUCT_IF_C L_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu1ll, L_BFu31ll_BFu1ll)
//============================================================================


struct  L_BFu31ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 L_BFu31ll_BFu1s) C1{ FL FL:31 Fs:1}



static void Test_L_BFu31ll_BFu1s()
{
  {
    init_simple_test("L_BFu31ll_BFu1s");
    static STRUCT_IF_C L_BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 11, 7, 1, 1, "L_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu1s, L_BFu31ll_BFu1s)
//============================================================================


struct  L_BFu31ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 L_BFu31ll_BFu31i) C1{ FL FL:31 Fi:31}



static void Test_L_BFu31ll_BFu31i()
{
  {
    init_simple_test("L_BFu31ll_BFu31i");
    static STRUCT_IF_C L_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu31i, L_BFu31ll_BFu31i)
//============================================================================


struct  L_BFu31ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 L_BFu31ll_BFu31ll) C1{ FL FL:31 FL:31}



static void Test_L_BFu31ll_BFu31ll()
{
  {
    init_simple_test("L_BFu31ll_BFu31ll");
    static STRUCT_IF_C L_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, 11, 7, 31, 1, "L_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, 11, 7, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu31ll, L_BFu31ll_BFu31ll)
//============================================================================


struct  L_BFu31ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 L_BFu31ll_BFu32i) C1{ FL FL:31 Fi:32}



static void Test_L_BFu31ll_BFu32i()
{
  {
    init_simple_test("L_BFu31ll_BFu32i");
    static STRUCT_IF_C L_BFu31ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu32i, L_BFu31ll_BFu32i)
//============================================================================


struct  L_BFu31ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 L_BFu31ll_BFu32ll) C1{ FL FL:31 FL:32}



static void Test_L_BFu31ll_BFu32ll()
{
  {
    init_simple_test("L_BFu31ll_BFu32ll");
    static STRUCT_IF_C L_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, 11, 7, 32, 1, "L_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, 11, 7, 32, hide_ull(1LL<<31), "L_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu32ll, L_BFu31ll_BFu32ll)
//============================================================================


struct  L_BFu31ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 L_BFu31ll_BFu33) C1{ FL FL:31 FL:33}



static void Test_L_BFu31ll_BFu33()
{
  {
    init_simple_test("L_BFu31ll_BFu33");
    static STRUCT_IF_C L_BFu31ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, 11, 7, 33, 1, "L_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, 11, 7, 33, hide_ull(1LL<<32), "L_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu33, L_BFu31ll_BFu33)
//============================================================================


struct  L_BFu31ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 L_BFu31ll_BFu7c) C1{ FL FL:31 Fc:7}



static void Test_L_BFu31ll_BFu7c()
{
  {
    init_simple_test("L_BFu31ll_BFu7c");
    static STRUCT_IF_C L_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu7c, L_BFu31ll_BFu7c)
//============================================================================


struct  L_BFu31ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 L_BFu31ll_BFu7i) C1{ FL FL:31 Fi:7}



static void Test_L_BFu31ll_BFu7i()
{
  {
    init_simple_test("L_BFu31ll_BFu7i");
    static STRUCT_IF_C L_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu7i, L_BFu31ll_BFu7i)
//============================================================================


struct  L_BFu31ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 L_BFu31ll_BFu7ll) C1{ FL FL:31 FL:7}



static void Test_L_BFu31ll_BFu7ll()
{
  {
    init_simple_test("L_BFu31ll_BFu7ll");
    static STRUCT_IF_C L_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 11, 7, 7, 1, "L_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 11, 7, 7, hide_ull(1LL<<6), "L_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu7ll, L_BFu31ll_BFu7ll)
//============================================================================


struct  L_BFu31ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 L_BFu31ll_BFu7s) C1{ FL FL:31 Fs:7}



static void Test_L_BFu31ll_BFu7s()
{
  {
    init_simple_test("L_BFu31ll_BFu7s");
    static STRUCT_IF_C L_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu7s, L_BFu31ll_BFu7s)
//============================================================================


struct  L_BFu31ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 L_BFu31ll_BFu8c) C1{ FL FL:31 Fc:8}



static void Test_L_BFu31ll_BFu8c()
{
  {
    init_simple_test("L_BFu31ll_BFu8c");
    static STRUCT_IF_C L_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu8c, L_BFu31ll_BFu8c)
//============================================================================


struct  L_BFu31ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 L_BFu31ll_BFu8i) C1{ FL FL:31 Fi:8}



static void Test_L_BFu31ll_BFu8i()
{
  {
    init_simple_test("L_BFu31ll_BFu8i");
    static STRUCT_IF_C L_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu8i, L_BFu31ll_BFu8i)
//============================================================================


struct  L_BFu31ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 L_BFu31ll_BFu8ll) C1{ FL FL:31 FL:8}



static void Test_L_BFu31ll_BFu8ll()
{
  {
    init_simple_test("L_BFu31ll_BFu8ll");
    static STRUCT_IF_C L_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 11, 7, 8, 1, "L_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 11, 7, 8, hide_ull(1LL<<7), "L_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu8ll, L_BFu31ll_BFu8ll)
//============================================================================


struct  L_BFu31ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 L_BFu31ll_BFu8s) C1{ FL FL:31 Fs:8}



static void Test_L_BFu31ll_BFu8s()
{
  {
    init_simple_test("L_BFu31ll_BFu8s");
    static STRUCT_IF_C L_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu8s, L_BFu31ll_BFu8s)
//============================================================================


struct  L_BFu31ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 L_BFu31ll_BFu9i) C1{ FL FL:31 Fi:9}



static void Test_L_BFu31ll_BFu9i()
{
  {
    init_simple_test("L_BFu31ll_BFu9i");
    static STRUCT_IF_C L_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu9i, L_BFu31ll_BFu9i)
//============================================================================


struct  L_BFu31ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 L_BFu31ll_BFu9ll) C1{ FL FL:31 FL:9}



static void Test_L_BFu31ll_BFu9ll()
{
  {
    init_simple_test("L_BFu31ll_BFu9ll");
    static STRUCT_IF_C L_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 11, 7, 9, 1, "L_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 11, 7, 9, hide_ull(1LL<<8), "L_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu9ll, L_BFu31ll_BFu9ll)
//============================================================================


struct  L_BFu31ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 L_BFu31ll_BFu9s) C1{ FL FL:31 Fs:9}



static void Test_L_BFu31ll_BFu9s()
{
  {
    init_simple_test("L_BFu31ll_BFu9s");
    static STRUCT_IF_C L_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu9s, L_BFu31ll_BFu9s)
//============================================================================


struct  L_BFu31ll_C  {
  __tsi64 v1;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 L_BFu31ll_C) C1{ FL FL:31 Fc}



static void Test_L_BFu31ll_C()
{
  {
    init_simple_test("L_BFu31ll_C");
    static STRUCT_IF_C L_BFu31ll_C lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_C");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_C");
    check_field_offset(lv, v3, 12, "L_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_C, L_BFu31ll_C)
//============================================================================


struct  L_BFu31ll_D  {
  __tsi64 v1;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 L_BFu31ll_D) C1{ FL FL:31 FL}



static void Test_L_BFu31ll_D()
{
  {
    init_simple_test("L_BFu31ll_D");
    static STRUCT_IF_C L_BFu31ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_D");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_D, L_BFu31ll_D)
//============================================================================


struct  L_BFu31ll_F  {
  __tsi64 v1;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 L_BFu31ll_F) C1{ FL FL:31 Fi}



static void Test_L_BFu31ll_F()
{
  {
    init_simple_test("L_BFu31ll_F");
    static STRUCT_IF_C L_BFu31ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_F");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_F");
    check_field_offset(lv, v3, 12, "L_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_F, L_BFu31ll_F)
//============================================================================


struct  L_BFu31ll_I  {
  __tsi64 v1;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 L_BFu31ll_I) C1{ FL FL:31 Fi}



static void Test_L_BFu31ll_I()
{
  {
    init_simple_test("L_BFu31ll_I");
    static STRUCT_IF_C L_BFu31ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_I");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_I");
    check_field_offset(lv, v3, 12, "L_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_I, L_BFu31ll_I)
//============================================================================


struct  L_BFu31ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 L_BFu31ll_Ip) C1{ FL FL:31 Fp}



static void Test_L_BFu31ll_Ip()
{
  {
    init_simple_test("L_BFu31ll_Ip");
    static STRUCT_IF_C L_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Ip, L_BFu31ll_Ip)
//============================================================================


struct  L_BFu31ll_L  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 L_BFu31ll_L) C1{ FL FL:31 FL}



static void Test_L_BFu31ll_L()
{
  {
    init_simple_test("L_BFu31ll_L");
    static STRUCT_IF_C L_BFu31ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_L");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_L, L_BFu31ll_L)
//============================================================================


struct  L_BFu31ll_S  {
  __tsi64 v1;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 L_BFu31ll_S) C1{ FL FL:31 Fs}



static void Test_L_BFu31ll_S()
{
  {
    init_simple_test("L_BFu31ll_S");
    static STRUCT_IF_C L_BFu31ll_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_S");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_S");
    check_field_offset(lv, v3, 12, "L_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_S, L_BFu31ll_S)
//============================================================================


struct  L_BFu31ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 L_BFu31ll_Uc) C1{ FL FL:31 Fc}



static void Test_L_BFu31ll_Uc()
{
  {
    init_simple_test("L_BFu31ll_Uc");
    static STRUCT_IF_C L_BFu31ll_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Uc");
    check_field_offset(lv, v3, 12, "L_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Uc, L_BFu31ll_Uc)
//============================================================================


struct  L_BFu31ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 L_BFu31ll_Ui) C1{ FL FL:31 Fi}



static void Test_L_BFu31ll_Ui()
{
  {
    init_simple_test("L_BFu31ll_Ui");
    static STRUCT_IF_C L_BFu31ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Ui, L_BFu31ll_Ui)
//============================================================================


struct  L_BFu31ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 L_BFu31ll_Ul) C1{ FL FL:31 FL}



static void Test_L_BFu31ll_Ul()
{
  {
    init_simple_test("L_BFu31ll_Ul");
    static STRUCT_IF_C L_BFu31ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Ul, L_BFu31ll_Ul)
//============================================================================


struct  L_BFu31ll_Us  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 L_BFu31ll_Us) C1{ FL FL:31 Fs}



static void Test_L_BFu31ll_Us()
{
  {
    init_simple_test("L_BFu31ll_Us");
    static STRUCT_IF_C L_BFu31ll_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Us");
    check_field_offset(lv, v3, 12, "L_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Us, L_BFu31ll_Us)
//============================================================================


struct  L_BFu31ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 L_BFu31ll_Vp) C1{ FL FL:31 Fp}



static void Test_L_BFu31ll_Vp()
{
  {
    init_simple_test("L_BFu31ll_Vp");
    static STRUCT_IF_C L_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_Vp, L_BFu31ll_Vp)
//============================================================================


struct  L_BFu32i  {
  __tsi64 v1;
  unsigned int v2:32;
};
//SIG(1 L_BFu32i) C1{ FL Fi:32}



static void Test_L_BFu32i()
{
  {
    init_simple_test("L_BFu32i");
    static STRUCT_IF_C L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i, L_BFu32i)
//============================================================================


struct  L_BFu32i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 L_BFu32i_BFu15i) C1{ FL Fi:32 Fi:15}



static void Test_L_BFu32i_BFu15i()
{
  {
    init_simple_test("L_BFu32i_BFu15i");
    static STRUCT_IF_C L_BFu32i_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu15i, L_BFu32i_BFu15i)
//============================================================================


struct  L_BFu32i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 L_BFu32i_BFu15ll) C1{ FL Fi:32 FL:15}



static void Test_L_BFu32i_BFu15ll()
{
  {
    init_simple_test("L_BFu32i_BFu15ll");
    static STRUCT_IF_C L_BFu32i_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu15ll, L_BFu32i_BFu15ll)
//============================================================================


struct  L_BFu32i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 L_BFu32i_BFu15s) C1{ FL Fi:32 Fs:15}



static void Test_L_BFu32i_BFu15s()
{
  {
    init_simple_test("L_BFu32i_BFu15s");
    static STRUCT_IF_C L_BFu32i_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu15s, L_BFu32i_BFu15s)
//============================================================================


struct  L_BFu32i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 L_BFu32i_BFu16i) C1{ FL Fi:32 Fi:16}



static void Test_L_BFu32i_BFu16i()
{
  {
    init_simple_test("L_BFu32i_BFu16i");
    static STRUCT_IF_C L_BFu32i_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu16i, L_BFu32i_BFu16i)
//============================================================================


struct  L_BFu32i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 L_BFu32i_BFu16ll) C1{ FL Fi:32 FL:16}



static void Test_L_BFu32i_BFu16ll()
{
  {
    init_simple_test("L_BFu32i_BFu16ll");
    static STRUCT_IF_C L_BFu32i_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu16ll, L_BFu32i_BFu16ll)
//============================================================================


struct  L_BFu32i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 L_BFu32i_BFu16s) C1{ FL Fi:32 Fs:16}



static void Test_L_BFu32i_BFu16s()
{
  {
    init_simple_test("L_BFu32i_BFu16s");
    static STRUCT_IF_C L_BFu32i_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu16s, L_BFu32i_BFu16s)
//============================================================================


struct  L_BFu32i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 L_BFu32i_BFu17i) C1{ FL Fi:32 Fi:17}



static void Test_L_BFu32i_BFu17i()
{
  {
    init_simple_test("L_BFu32i_BFu17i");
    static STRUCT_IF_C L_BFu32i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu17i, L_BFu32i_BFu17i)
//============================================================================


struct  L_BFu32i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 L_BFu32i_BFu17ll) C1{ FL Fi:32 FL:17}



static void Test_L_BFu32i_BFu17ll()
{
  {
    init_simple_test("L_BFu32i_BFu17ll");
    static STRUCT_IF_C L_BFu32i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu17ll, L_BFu32i_BFu17ll)
//============================================================================


struct  L_BFu32i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 L_BFu32i_BFu1c) C1{ FL Fi:32 Fc:1}



static void Test_L_BFu32i_BFu1c()
{
  {
    init_simple_test("L_BFu32i_BFu1c");
    static STRUCT_IF_C L_BFu32i_BFu1c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu1c, L_BFu32i_BFu1c)
//============================================================================


struct  L_BFu32i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 L_BFu32i_BFu1i) C1{ FL Fi:32 Fi:1}



static void Test_L_BFu32i_BFu1i()
{
  {
    init_simple_test("L_BFu32i_BFu1i");
    static STRUCT_IF_C L_BFu32i_BFu1i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu1i, L_BFu32i_BFu1i)
//============================================================================


struct  L_BFu32i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 L_BFu32i_BFu1ll) C1{ FL Fi:32 FL:1}



static void Test_L_BFu32i_BFu1ll()
{
  {
    init_simple_test("L_BFu32i_BFu1ll");
    static STRUCT_IF_C L_BFu32i_BFu1ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu1ll, L_BFu32i_BFu1ll)
//============================================================================


struct  L_BFu32i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 L_BFu32i_BFu1s) C1{ FL Fi:32 Fs:1}



static void Test_L_BFu32i_BFu1s()
{
  {
    init_simple_test("L_BFu32i_BFu1s");
    static STRUCT_IF_C L_BFu32i_BFu1s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu1s, L_BFu32i_BFu1s)
//============================================================================


struct  L_BFu32i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 L_BFu32i_BFu31i) C1{ FL Fi:32 Fi:31}



static void Test_L_BFu32i_BFu31i()
{
  {
    init_simple_test("L_BFu32i_BFu31i");
    static STRUCT_IF_C L_BFu32i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu31i, L_BFu32i_BFu31i)
//============================================================================


struct  L_BFu32i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 L_BFu32i_BFu31ll) C1{ FL Fi:32 FL:31}



static void Test_L_BFu32i_BFu31ll()
{
  {
    init_simple_test("L_BFu32i_BFu31ll");
    static STRUCT_IF_C L_BFu32i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu31ll, L_BFu32i_BFu31ll)
//============================================================================


struct  L_BFu32i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 L_BFu32i_BFu32i) C1{ FL Fi:32 Fi:32}



static void Test_L_BFu32i_BFu32i()
{
  {
    init_simple_test("L_BFu32i_BFu32i");
    static STRUCT_IF_C L_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu32i, L_BFu32i_BFu32i)
//============================================================================


struct  L_BFu32i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 L_BFu32i_BFu32ll) C1{ FL Fi:32 FL:32}



static void Test_L_BFu32i_BFu32ll()
{
  {
    init_simple_test("L_BFu32i_BFu32ll");
    static STRUCT_IF_C L_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu32ll, L_BFu32i_BFu32ll)
//============================================================================


struct  L_BFu32i_BFu33  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 L_BFu32i_BFu33) C1{ FL Fi:32 FL:33}



static void Test_L_BFu32i_BFu33()
{
  {
    init_simple_test("L_BFu32i_BFu33");
    static STRUCT_IF_C L_BFu32i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "L_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "L_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu33, L_BFu32i_BFu33)
//============================================================================


struct  L_BFu32i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 L_BFu32i_BFu7c) C1{ FL Fi:32 Fc:7}



static void Test_L_BFu32i_BFu7c()
{
  {
    init_simple_test("L_BFu32i_BFu7c");
    static STRUCT_IF_C L_BFu32i_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu7c, L_BFu32i_BFu7c)
//============================================================================


struct  L_BFu32i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 L_BFu32i_BFu7i) C1{ FL Fi:32 Fi:7}



static void Test_L_BFu32i_BFu7i()
{
  {
    init_simple_test("L_BFu32i_BFu7i");
    static STRUCT_IF_C L_BFu32i_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu7i, L_BFu32i_BFu7i)
//============================================================================


struct  L_BFu32i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 L_BFu32i_BFu7ll) C1{ FL Fi:32 FL:7}



static void Test_L_BFu32i_BFu7ll()
{
  {
    init_simple_test("L_BFu32i_BFu7ll");
    static STRUCT_IF_C L_BFu32i_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu7ll, L_BFu32i_BFu7ll)
//============================================================================


struct  L_BFu32i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 L_BFu32i_BFu7s) C1{ FL Fi:32 Fs:7}



static void Test_L_BFu32i_BFu7s()
{
  {
    init_simple_test("L_BFu32i_BFu7s");
    static STRUCT_IF_C L_BFu32i_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu7s, L_BFu32i_BFu7s)
//============================================================================


struct  L_BFu32i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 L_BFu32i_BFu8c) C1{ FL Fi:32 Fc:8}



static void Test_L_BFu32i_BFu8c()
{
  {
    init_simple_test("L_BFu32i_BFu8c");
    static STRUCT_IF_C L_BFu32i_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu8c, L_BFu32i_BFu8c)
//============================================================================


struct  L_BFu32i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 L_BFu32i_BFu8i) C1{ FL Fi:32 Fi:8}



static void Test_L_BFu32i_BFu8i()
{
  {
    init_simple_test("L_BFu32i_BFu8i");
    static STRUCT_IF_C L_BFu32i_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu8i, L_BFu32i_BFu8i)
//============================================================================


struct  L_BFu32i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 L_BFu32i_BFu8ll) C1{ FL Fi:32 FL:8}



static void Test_L_BFu32i_BFu8ll()
{
  {
    init_simple_test("L_BFu32i_BFu8ll");
    static STRUCT_IF_C L_BFu32i_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu8ll, L_BFu32i_BFu8ll)
//============================================================================


struct  L_BFu32i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 L_BFu32i_BFu8s) C1{ FL Fi:32 Fs:8}



static void Test_L_BFu32i_BFu8s()
{
  {
    init_simple_test("L_BFu32i_BFu8s");
    static STRUCT_IF_C L_BFu32i_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu8s, L_BFu32i_BFu8s)
//============================================================================


struct  L_BFu32i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 L_BFu32i_BFu9i) C1{ FL Fi:32 Fi:9}



static void Test_L_BFu32i_BFu9i()
{
  {
    init_simple_test("L_BFu32i_BFu9i");
    static STRUCT_IF_C L_BFu32i_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu9i, L_BFu32i_BFu9i)
//============================================================================


struct  L_BFu32i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 L_BFu32i_BFu9ll) C1{ FL Fi:32 FL:9}



static void Test_L_BFu32i_BFu9ll()
{
  {
    init_simple_test("L_BFu32i_BFu9ll");
    static STRUCT_IF_C L_BFu32i_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu9ll, L_BFu32i_BFu9ll)
//============================================================================


struct  L_BFu32i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 L_BFu32i_BFu9s) C1{ FL Fi:32 Fs:9}



static void Test_L_BFu32i_BFu9s()
{
  {
    init_simple_test("L_BFu32i_BFu9s");
    static STRUCT_IF_C L_BFu32i_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu9s, L_BFu32i_BFu9s)
//============================================================================


struct  L_BFu32i_C  {
  __tsi64 v1;
  unsigned int v2:32;
  char v3;
};
//SIG(1 L_BFu32i_C) C1{ FL Fi:32 Fc}



static void Test_L_BFu32i_C()
{
  {
    init_simple_test("L_BFu32i_C");
    static STRUCT_IF_C L_BFu32i_C lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_C)");
    check_field_offset(lv, v1, 0, "L_BFu32i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_C");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_C");
    check_field_offset(lv, v3, 12, "L_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_C, L_BFu32i_C)
//============================================================================


struct  L_BFu32i_D  {
  __tsi64 v1;
  unsigned int v2:32;
  double v3;
};
//SIG(1 L_BFu32i_D) C1{ FL Fi:32 FL}



static void Test_L_BFu32i_D()
{
  {
    init_simple_test("L_BFu32i_D");
    static STRUCT_IF_C L_BFu32i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_D)");
    check_field_offset(lv, v1, 0, "L_BFu32i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_D");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_D, L_BFu32i_D)
//============================================================================


struct  L_BFu32i_F  {
  __tsi64 v1;
  unsigned int v2:32;
  float v3;
};
//SIG(1 L_BFu32i_F) C1{ FL Fi:32 Fi}



static void Test_L_BFu32i_F()
{
  {
    init_simple_test("L_BFu32i_F");
    static STRUCT_IF_C L_BFu32i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_F)");
    check_field_offset(lv, v1, 0, "L_BFu32i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_F");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_F");
    check_field_offset(lv, v3, 12, "L_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_F, L_BFu32i_F)
//============================================================================


struct  L_BFu32i_I  {
  __tsi64 v1;
  unsigned int v2:32;
  int v3;
};
//SIG(1 L_BFu32i_I) C1{ FL Fi:32 Fi}



static void Test_L_BFu32i_I()
{
  {
    init_simple_test("L_BFu32i_I");
    static STRUCT_IF_C L_BFu32i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_I)");
    check_field_offset(lv, v1, 0, "L_BFu32i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_I");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_I");
    check_field_offset(lv, v3, 12, "L_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_I, L_BFu32i_I)
//============================================================================


struct  L_BFu32i_Ip  {
  __tsi64 v1;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 L_BFu32i_Ip) C1{ FL Fi:32 Fp}



static void Test_L_BFu32i_Ip()
{
  {
    init_simple_test("L_BFu32i_Ip");
    static STRUCT_IF_C L_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Ip, L_BFu32i_Ip)
//============================================================================


struct  L_BFu32i_L  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 L_BFu32i_L) C1{ FL Fi:32 FL}



static void Test_L_BFu32i_L()
{
  {
    init_simple_test("L_BFu32i_L");
    static STRUCT_IF_C L_BFu32i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_L)");
    check_field_offset(lv, v1, 0, "L_BFu32i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_L");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_L, L_BFu32i_L)
//============================================================================


struct  L_BFu32i_S  {
  __tsi64 v1;
  unsigned int v2:32;
  short v3;
};
//SIG(1 L_BFu32i_S) C1{ FL Fi:32 Fs}



static void Test_L_BFu32i_S()
{
  {
    init_simple_test("L_BFu32i_S");
    static STRUCT_IF_C L_BFu32i_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_S)");
    check_field_offset(lv, v1, 0, "L_BFu32i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_S");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_S");
    check_field_offset(lv, v3, 12, "L_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_S, L_BFu32i_S)
//============================================================================


struct  L_BFu32i_Uc  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 L_BFu32i_Uc) C1{ FL Fi:32 Fc}



static void Test_L_BFu32i_Uc()
{
  {
    init_simple_test("L_BFu32i_Uc");
    static STRUCT_IF_C L_BFu32i_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Uc");
    check_field_offset(lv, v3, 12, "L_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Uc, L_BFu32i_Uc)
//============================================================================


struct  L_BFu32i_Ui  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 L_BFu32i_Ui) C1{ FL Fi:32 Fi}



static void Test_L_BFu32i_Ui()
{
  {
    init_simple_test("L_BFu32i_Ui");
    static STRUCT_IF_C L_BFu32i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Ui, L_BFu32i_Ui)
//============================================================================


struct  L_BFu32i_Ul  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 L_BFu32i_Ul) C1{ FL Fi:32 FL}



static void Test_L_BFu32i_Ul()
{
  {
    init_simple_test("L_BFu32i_Ul");
    static STRUCT_IF_C L_BFu32i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Ul, L_BFu32i_Ul)
//============================================================================


struct  L_BFu32i_Us  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 L_BFu32i_Us) C1{ FL Fi:32 Fs}



static void Test_L_BFu32i_Us()
{
  {
    init_simple_test("L_BFu32i_Us");
    static STRUCT_IF_C L_BFu32i_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Us");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Us");
    check_field_offset(lv, v3, 12, "L_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Us, L_BFu32i_Us)
//============================================================================


struct  L_BFu32i_Vp  {
  __tsi64 v1;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 L_BFu32i_Vp) C1{ FL Fi:32 Fp}



static void Test_L_BFu32i_Vp()
{
  {
    init_simple_test("L_BFu32i_Vp");
    static STRUCT_IF_C L_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu32i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_Vp, L_BFu32i_Vp)
//============================================================================


struct  L_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:32;
};
//SIG(1 L_BFu32ll) C1{ FL FL:32}



static void Test_L_BFu32ll()
{
  {
    init_simple_test("L_BFu32ll");
    static STRUCT_IF_C L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll, L_BFu32ll)
//============================================================================


struct  L_BFu32ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 L_BFu32ll_BFu15i) C1{ FL FL:32 Fi:15}



static void Test_L_BFu32ll_BFu15i()
{
  {
    init_simple_test("L_BFu32ll_BFu15i");
    static STRUCT_IF_C L_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu15i, L_BFu32ll_BFu15i)
//============================================================================


struct  L_BFu32ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 L_BFu32ll_BFu15ll) C1{ FL FL:32 FL:15}



static void Test_L_BFu32ll_BFu15ll()
{
  {
    init_simple_test("L_BFu32ll_BFu15ll");
    static STRUCT_IF_C L_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu15ll, L_BFu32ll_BFu15ll)
//============================================================================


struct  L_BFu32ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 L_BFu32ll_BFu15s) C1{ FL FL:32 Fs:15}



static void Test_L_BFu32ll_BFu15s()
{
  {
    init_simple_test("L_BFu32ll_BFu15s");
    static STRUCT_IF_C L_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu15s, L_BFu32ll_BFu15s)
//============================================================================


struct  L_BFu32ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 L_BFu32ll_BFu16i) C1{ FL FL:32 Fi:16}



static void Test_L_BFu32ll_BFu16i()
{
  {
    init_simple_test("L_BFu32ll_BFu16i");
    static STRUCT_IF_C L_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu16i, L_BFu32ll_BFu16i)
//============================================================================


struct  L_BFu32ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 L_BFu32ll_BFu16ll) C1{ FL FL:32 FL:16}



static void Test_L_BFu32ll_BFu16ll()
{
  {
    init_simple_test("L_BFu32ll_BFu16ll");
    static STRUCT_IF_C L_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu16ll, L_BFu32ll_BFu16ll)
//============================================================================


struct  L_BFu32ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 L_BFu32ll_BFu16s) C1{ FL FL:32 Fs:16}



static void Test_L_BFu32ll_BFu16s()
{
  {
    init_simple_test("L_BFu32ll_BFu16s");
    static STRUCT_IF_C L_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu16s, L_BFu32ll_BFu16s)
//============================================================================


struct  L_BFu32ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 L_BFu32ll_BFu17i) C1{ FL FL:32 Fi:17}



static void Test_L_BFu32ll_BFu17i()
{
  {
    init_simple_test("L_BFu32ll_BFu17i");
    static STRUCT_IF_C L_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu17i, L_BFu32ll_BFu17i)
//============================================================================


struct  L_BFu32ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 L_BFu32ll_BFu17ll) C1{ FL FL:32 FL:17}



static void Test_L_BFu32ll_BFu17ll()
{
  {
    init_simple_test("L_BFu32ll_BFu17ll");
    static STRUCT_IF_C L_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu17ll, L_BFu32ll_BFu17ll)
//============================================================================


struct  L_BFu32ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 L_BFu32ll_BFu1c) C1{ FL FL:32 Fc:1}



static void Test_L_BFu32ll_BFu1c()
{
  {
    init_simple_test("L_BFu32ll_BFu1c");
    static STRUCT_IF_C L_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu1c, L_BFu32ll_BFu1c)
//============================================================================


struct  L_BFu32ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 L_BFu32ll_BFu1i) C1{ FL FL:32 Fi:1}



static void Test_L_BFu32ll_BFu1i()
{
  {
    init_simple_test("L_BFu32ll_BFu1i");
    static STRUCT_IF_C L_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu1i, L_BFu32ll_BFu1i)
//============================================================================


struct  L_BFu32ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 L_BFu32ll_BFu1ll) C1{ FL FL:32 FL:1}



static void Test_L_BFu32ll_BFu1ll()
{
  {
    init_simple_test("L_BFu32ll_BFu1ll");
    static STRUCT_IF_C L_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu1ll, L_BFu32ll_BFu1ll)
//============================================================================


struct  L_BFu32ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 L_BFu32ll_BFu1s) C1{ FL FL:32 Fs:1}



static void Test_L_BFu32ll_BFu1s()
{
  {
    init_simple_test("L_BFu32ll_BFu1s");
    static STRUCT_IF_C L_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu1s, L_BFu32ll_BFu1s)
//============================================================================


struct  L_BFu32ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 L_BFu32ll_BFu31i) C1{ FL FL:32 Fi:31}



static void Test_L_BFu32ll_BFu31i()
{
  {
    init_simple_test("L_BFu32ll_BFu31i");
    static STRUCT_IF_C L_BFu32ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu31i, L_BFu32ll_BFu31i)
//============================================================================


struct  L_BFu32ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 L_BFu32ll_BFu31ll) C1{ FL FL:32 FL:31}



static void Test_L_BFu32ll_BFu31ll()
{
  {
    init_simple_test("L_BFu32ll_BFu31ll");
    static STRUCT_IF_C L_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu31ll, L_BFu32ll_BFu31ll)
//============================================================================


struct  L_BFu32ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 L_BFu32ll_BFu32i) C1{ FL FL:32 Fi:32}



static void Test_L_BFu32ll_BFu32i()
{
  {
    init_simple_test("L_BFu32ll_BFu32i");
    static STRUCT_IF_C L_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu32i, L_BFu32ll_BFu32i)
//============================================================================


struct  L_BFu32ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 L_BFu32ll_BFu32ll) C1{ FL FL:32 FL:32}



static void Test_L_BFu32ll_BFu32ll()
{
  {
    init_simple_test("L_BFu32ll_BFu32ll");
    static STRUCT_IF_C L_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu32ll, L_BFu32ll_BFu32ll)
//============================================================================


struct  L_BFu32ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 L_BFu32ll_BFu33) C1{ FL FL:32 FL:33}



static void Test_L_BFu32ll_BFu33()
{
  {
    init_simple_test("L_BFu32ll_BFu33");
    static STRUCT_IF_C L_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "L_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "L_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu33, L_BFu32ll_BFu33)
//============================================================================


struct  L_BFu32ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 L_BFu32ll_BFu7c) C1{ FL FL:32 Fc:7}



static void Test_L_BFu32ll_BFu7c()
{
  {
    init_simple_test("L_BFu32ll_BFu7c");
    static STRUCT_IF_C L_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu7c, L_BFu32ll_BFu7c)
//============================================================================


struct  L_BFu32ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 L_BFu32ll_BFu7i) C1{ FL FL:32 Fi:7}



static void Test_L_BFu32ll_BFu7i()
{
  {
    init_simple_test("L_BFu32ll_BFu7i");
    static STRUCT_IF_C L_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu7i, L_BFu32ll_BFu7i)
//============================================================================


struct  L_BFu32ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 L_BFu32ll_BFu7ll) C1{ FL FL:32 FL:7}



static void Test_L_BFu32ll_BFu7ll()
{
  {
    init_simple_test("L_BFu32ll_BFu7ll");
    static STRUCT_IF_C L_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu7ll, L_BFu32ll_BFu7ll)
//============================================================================


struct  L_BFu32ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 L_BFu32ll_BFu7s) C1{ FL FL:32 Fs:7}



static void Test_L_BFu32ll_BFu7s()
{
  {
    init_simple_test("L_BFu32ll_BFu7s");
    static STRUCT_IF_C L_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu7s, L_BFu32ll_BFu7s)
//============================================================================


struct  L_BFu32ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 L_BFu32ll_BFu8c) C1{ FL FL:32 Fc:8}



static void Test_L_BFu32ll_BFu8c()
{
  {
    init_simple_test("L_BFu32ll_BFu8c");
    static STRUCT_IF_C L_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu8c, L_BFu32ll_BFu8c)
//============================================================================


struct  L_BFu32ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 L_BFu32ll_BFu8i) C1{ FL FL:32 Fi:8}



static void Test_L_BFu32ll_BFu8i()
{
  {
    init_simple_test("L_BFu32ll_BFu8i");
    static STRUCT_IF_C L_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu8i, L_BFu32ll_BFu8i)
//============================================================================


struct  L_BFu32ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 L_BFu32ll_BFu8ll) C1{ FL FL:32 FL:8}



static void Test_L_BFu32ll_BFu8ll()
{
  {
    init_simple_test("L_BFu32ll_BFu8ll");
    static STRUCT_IF_C L_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu8ll, L_BFu32ll_BFu8ll)
//============================================================================


struct  L_BFu32ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 L_BFu32ll_BFu8s) C1{ FL FL:32 Fs:8}



static void Test_L_BFu32ll_BFu8s()
{
  {
    init_simple_test("L_BFu32ll_BFu8s");
    static STRUCT_IF_C L_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu8s, L_BFu32ll_BFu8s)
//============================================================================


struct  L_BFu32ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 L_BFu32ll_BFu9i) C1{ FL FL:32 Fi:9}



static void Test_L_BFu32ll_BFu9i()
{
  {
    init_simple_test("L_BFu32ll_BFu9i");
    static STRUCT_IF_C L_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu9i, L_BFu32ll_BFu9i)
//============================================================================


struct  L_BFu32ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 L_BFu32ll_BFu9ll) C1{ FL FL:32 FL:9}



static void Test_L_BFu32ll_BFu9ll()
{
  {
    init_simple_test("L_BFu32ll_BFu9ll");
    static STRUCT_IF_C L_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu9ll, L_BFu32ll_BFu9ll)
//============================================================================


struct  L_BFu32ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 L_BFu32ll_BFu9s) C1{ FL FL:32 Fs:9}



static void Test_L_BFu32ll_BFu9s()
{
  {
    init_simple_test("L_BFu32ll_BFu9s");
    static STRUCT_IF_C L_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu9s, L_BFu32ll_BFu9s)
//============================================================================


struct  L_BFu32ll_C  {
  __tsi64 v1;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 L_BFu32ll_C) C1{ FL FL:32 Fc}



static void Test_L_BFu32ll_C()
{
  {
    init_simple_test("L_BFu32ll_C");
    static STRUCT_IF_C L_BFu32ll_C lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_C");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_C");
    check_field_offset(lv, v3, 12, "L_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_C, L_BFu32ll_C)
//============================================================================


struct  L_BFu32ll_D  {
  __tsi64 v1;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 L_BFu32ll_D) C1{ FL FL:32 FL}



static void Test_L_BFu32ll_D()
{
  {
    init_simple_test("L_BFu32ll_D");
    static STRUCT_IF_C L_BFu32ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_D");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_D, L_BFu32ll_D)
//============================================================================


struct  L_BFu32ll_F  {
  __tsi64 v1;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 L_BFu32ll_F) C1{ FL FL:32 Fi}



static void Test_L_BFu32ll_F()
{
  {
    init_simple_test("L_BFu32ll_F");
    static STRUCT_IF_C L_BFu32ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_F");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_F");
    check_field_offset(lv, v3, 12, "L_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_F, L_BFu32ll_F)
//============================================================================


struct  L_BFu32ll_I  {
  __tsi64 v1;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 L_BFu32ll_I) C1{ FL FL:32 Fi}



static void Test_L_BFu32ll_I()
{
  {
    init_simple_test("L_BFu32ll_I");
    static STRUCT_IF_C L_BFu32ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_I");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_I");
    check_field_offset(lv, v3, 12, "L_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_I, L_BFu32ll_I)
//============================================================================


struct  L_BFu32ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 L_BFu32ll_Ip) C1{ FL FL:32 Fp}



static void Test_L_BFu32ll_Ip()
{
  {
    init_simple_test("L_BFu32ll_Ip");
    static STRUCT_IF_C L_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Ip, L_BFu32ll_Ip)
//============================================================================


struct  L_BFu32ll_L  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 L_BFu32ll_L) C1{ FL FL:32 FL}



static void Test_L_BFu32ll_L()
{
  {
    init_simple_test("L_BFu32ll_L");
    static STRUCT_IF_C L_BFu32ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_L");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_L, L_BFu32ll_L)
//============================================================================


struct  L_BFu32ll_S  {
  __tsi64 v1;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 L_BFu32ll_S) C1{ FL FL:32 Fs}



static void Test_L_BFu32ll_S()
{
  {
    init_simple_test("L_BFu32ll_S");
    static STRUCT_IF_C L_BFu32ll_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_S");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_S");
    check_field_offset(lv, v3, 12, "L_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_S, L_BFu32ll_S)
//============================================================================


struct  L_BFu32ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 L_BFu32ll_Uc) C1{ FL FL:32 Fc}



static void Test_L_BFu32ll_Uc()
{
  {
    init_simple_test("L_BFu32ll_Uc");
    static STRUCT_IF_C L_BFu32ll_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Uc");
    check_field_offset(lv, v3, 12, "L_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Uc, L_BFu32ll_Uc)
//============================================================================


struct  L_BFu32ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 L_BFu32ll_Ui) C1{ FL FL:32 Fi}



static void Test_L_BFu32ll_Ui()
{
  {
    init_simple_test("L_BFu32ll_Ui");
    static STRUCT_IF_C L_BFu32ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Ui, L_BFu32ll_Ui)
//============================================================================


struct  L_BFu32ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 L_BFu32ll_Ul) C1{ FL FL:32 FL}



static void Test_L_BFu32ll_Ul()
{
  {
    init_simple_test("L_BFu32ll_Ul");
    static STRUCT_IF_C L_BFu32ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Ul, L_BFu32ll_Ul)
//============================================================================


struct  L_BFu32ll_Us  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 L_BFu32ll_Us) C1{ FL FL:32 Fs}



static void Test_L_BFu32ll_Us()
{
  {
    init_simple_test("L_BFu32ll_Us");
    static STRUCT_IF_C L_BFu32ll_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Us");
    check_field_offset(lv, v3, 12, "L_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Us, L_BFu32ll_Us)
//============================================================================


struct  L_BFu32ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 L_BFu32ll_Vp) C1{ FL FL:32 Fp}



static void Test_L_BFu32ll_Vp()
{
  {
    init_simple_test("L_BFu32ll_Vp");
    static STRUCT_IF_C L_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_Vp, L_BFu32ll_Vp)
//============================================================================


struct  L_BFu33  {
  __tsi64 v1;
  __tsu64 v2:33;
};
//SIG(1 L_BFu33) C1{ FL FL:33}



static void Test_L_BFu33()
{
  {
    init_simple_test("L_BFu33");
    static STRUCT_IF_C L_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33, L_BFu33)
//============================================================================


struct  L_BFu33_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 L_BFu33_BFu15i) C1{ FL FL:33 Fi:15}



static void Test_L_BFu33_BFu15i()
{
  {
    init_simple_test("L_BFu33_BFu15i");
    static STRUCT_IF_C L_BFu33_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 12, 1, 15, 1, "L_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 12, 1, 15, hide_ull(1LL<<14), "L_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu15i, L_BFu33_BFu15i)
//============================================================================


struct  L_BFu33_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 L_BFu33_BFu15ll) C1{ FL FL:33 FL:15}



static void Test_L_BFu33_BFu15ll()
{
  {
    init_simple_test("L_BFu33_BFu15ll");
    static STRUCT_IF_C L_BFu33_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 12, 1, 15, 1, "L_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 12, 1, 15, hide_ull(1LL<<14), "L_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu15ll, L_BFu33_BFu15ll)
//============================================================================


struct  L_BFu33_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 L_BFu33_BFu15s) C1{ FL FL:33 Fs:15}



static void Test_L_BFu33_BFu15s()
{
  {
    init_simple_test("L_BFu33_BFu15s");
    static STRUCT_IF_C L_BFu33_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 12, 1, 15, 1, "L_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 12, 1, 15, hide_ull(1LL<<14), "L_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu15s, L_BFu33_BFu15s)
//============================================================================


struct  L_BFu33_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 L_BFu33_BFu16i) C1{ FL FL:33 Fi:16}



static void Test_L_BFu33_BFu16i()
{
  {
    init_simple_test("L_BFu33_BFu16i");
    static STRUCT_IF_C L_BFu33_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 12, 1, 16, 1, "L_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 12, 1, 16, hide_ull(1LL<<15), "L_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu16i, L_BFu33_BFu16i)
//============================================================================


struct  L_BFu33_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 L_BFu33_BFu16ll) C1{ FL FL:33 FL:16}



static void Test_L_BFu33_BFu16ll()
{
  {
    init_simple_test("L_BFu33_BFu16ll");
    static STRUCT_IF_C L_BFu33_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 12, 1, 16, 1, "L_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 12, 1, 16, hide_ull(1LL<<15), "L_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu16ll, L_BFu33_BFu16ll)
//============================================================================


struct  L_BFu33_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 L_BFu33_BFu16s) C1{ FL FL:33 Fs:16}



static void Test_L_BFu33_BFu16s()
{
  {
    init_simple_test("L_BFu33_BFu16s");
    static STRUCT_IF_C L_BFu33_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 14, 0, 16, 1, "L_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 14, 0, 16, hide_ull(1LL<<15), "L_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu16s, L_BFu33_BFu16s)
//============================================================================


struct  L_BFu33_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 L_BFu33_BFu17i) C1{ FL FL:33 Fi:17}



static void Test_L_BFu33_BFu17i()
{
  {
    init_simple_test("L_BFu33_BFu17i");
    static STRUCT_IF_C L_BFu33_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 12, 1, 17, 1, "L_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 12, 1, 17, hide_ull(1LL<<16), "L_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu17i, L_BFu33_BFu17i)
//============================================================================


struct  L_BFu33_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 L_BFu33_BFu17ll) C1{ FL FL:33 FL:17}



static void Test_L_BFu33_BFu17ll()
{
  {
    init_simple_test("L_BFu33_BFu17ll");
    static STRUCT_IF_C L_BFu33_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 12, 1, 17, 1, "L_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 12, 1, 17, hide_ull(1LL<<16), "L_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu17ll, L_BFu33_BFu17ll)
//============================================================================


struct  L_BFu33_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 L_BFu33_BFu1c) C1{ FL FL:33 Fc:1}



static void Test_L_BFu33_BFu1c()
{
  {
    init_simple_test("L_BFu33_BFu1c");
    static STRUCT_IF_C L_BFu33_BFu1c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 12, 1, 1, 1, "L_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu1c, L_BFu33_BFu1c)
//============================================================================


struct  L_BFu33_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 L_BFu33_BFu1i) C1{ FL FL:33 Fi:1}



static void Test_L_BFu33_BFu1i()
{
  {
    init_simple_test("L_BFu33_BFu1i");
    static STRUCT_IF_C L_BFu33_BFu1i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 12, 1, 1, 1, "L_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu1i, L_BFu33_BFu1i)
//============================================================================


struct  L_BFu33_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 L_BFu33_BFu1ll) C1{ FL FL:33 FL:1}



static void Test_L_BFu33_BFu1ll()
{
  {
    init_simple_test("L_BFu33_BFu1ll");
    static STRUCT_IF_C L_BFu33_BFu1ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 12, 1, 1, 1, "L_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu1ll, L_BFu33_BFu1ll)
//============================================================================


struct  L_BFu33_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 L_BFu33_BFu1s) C1{ FL FL:33 Fs:1}



static void Test_L_BFu33_BFu1s()
{
  {
    init_simple_test("L_BFu33_BFu1s");
    static STRUCT_IF_C L_BFu33_BFu1s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 12, 1, 1, 1, "L_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu1s, L_BFu33_BFu1s)
//============================================================================


struct  L_BFu33_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 L_BFu33_BFu31i) C1{ FL FL:33 Fi:31}



static void Test_L_BFu33_BFu31i()
{
  {
    init_simple_test("L_BFu33_BFu31i");
    static STRUCT_IF_C L_BFu33_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 12, 1, 31, 1, "L_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 12, 1, 31, hide_ull(1LL<<30), "L_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu31i, L_BFu33_BFu31i)
//============================================================================


struct  L_BFu33_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 L_BFu33_BFu31ll) C1{ FL FL:33 FL:31}



static void Test_L_BFu33_BFu31ll()
{
  {
    init_simple_test("L_BFu33_BFu31ll");
    static STRUCT_IF_C L_BFu33_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 12, 1, 31, 1, "L_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 12, 1, 31, hide_ull(1LL<<30), "L_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu31ll, L_BFu33_BFu31ll)
//============================================================================


struct  L_BFu33_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 L_BFu33_BFu32i) C1{ FL FL:33 Fi:32}



static void Test_L_BFu33_BFu32i()
{
  {
    init_simple_test("L_BFu33_BFu32i");
    static STRUCT_IF_C L_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 16, 0, 32, 1, "L_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 16, 0, 32, hide_ull(1LL<<31), "L_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu32i, L_BFu33_BFu32i)
//============================================================================


struct  L_BFu33_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 L_BFu33_BFu32ll) C1{ FL FL:33 FL:32}



static void Test_L_BFu33_BFu32ll()
{
  {
    init_simple_test("L_BFu33_BFu32ll");
    static STRUCT_IF_C L_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), ABISELECT(0,1), 32, 1, "L_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), ABISELECT(0,1), 32, hide_ull(1LL<<31), "L_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu32ll, L_BFu33_BFu32ll)
//============================================================================


struct  L_BFu33_BFu33  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 L_BFu33_BFu33) C1{ FL FL:33 FL:33}



static void Test_L_BFu33_BFu33()
{
  {
    init_simple_test("L_BFu33_BFu33");
    static STRUCT_IF_C L_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), ABISELECT(0,1), 33, 1, "L_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), ABISELECT(0,1), 33, hide_ull(1LL<<32), "L_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu33, L_BFu33_BFu33)
//============================================================================


struct  L_BFu33_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 L_BFu33_BFu7c) C1{ FL FL:33 Fc:7}



static void Test_L_BFu33_BFu7c()
{
  {
    init_simple_test("L_BFu33_BFu7c");
    static STRUCT_IF_C L_BFu33_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 12, 1, 7, 1, "L_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 12, 1, 7, hide_ull(1LL<<6), "L_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu7c, L_BFu33_BFu7c)
//============================================================================


struct  L_BFu33_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 L_BFu33_BFu7i) C1{ FL FL:33 Fi:7}



static void Test_L_BFu33_BFu7i()
{
  {
    init_simple_test("L_BFu33_BFu7i");
    static STRUCT_IF_C L_BFu33_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 12, 1, 7, 1, "L_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 12, 1, 7, hide_ull(1LL<<6), "L_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu7i, L_BFu33_BFu7i)
//============================================================================


struct  L_BFu33_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 L_BFu33_BFu7ll) C1{ FL FL:33 FL:7}



static void Test_L_BFu33_BFu7ll()
{
  {
    init_simple_test("L_BFu33_BFu7ll");
    static STRUCT_IF_C L_BFu33_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 12, 1, 7, 1, "L_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 12, 1, 7, hide_ull(1LL<<6), "L_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu7ll, L_BFu33_BFu7ll)
//============================================================================


struct  L_BFu33_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 L_BFu33_BFu7s) C1{ FL FL:33 Fs:7}



static void Test_L_BFu33_BFu7s()
{
  {
    init_simple_test("L_BFu33_BFu7s");
    static STRUCT_IF_C L_BFu33_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 12, 1, 7, 1, "L_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 12, 1, 7, hide_ull(1LL<<6), "L_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu7s, L_BFu33_BFu7s)
//============================================================================


struct  L_BFu33_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 L_BFu33_BFu8c) C1{ FL FL:33 Fc:8}



static void Test_L_BFu33_BFu8c()
{
  {
    init_simple_test("L_BFu33_BFu8c");
    static STRUCT_IF_C L_BFu33_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 13, 0, 8, 1, "L_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 13, 0, 8, hide_ull(1LL<<7), "L_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu8c, L_BFu33_BFu8c)
//============================================================================


struct  L_BFu33_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 L_BFu33_BFu8i) C1{ FL FL:33 Fi:8}



static void Test_L_BFu33_BFu8i()
{
  {
    init_simple_test("L_BFu33_BFu8i");
    static STRUCT_IF_C L_BFu33_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 12, 1, 8, 1, "L_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 12, 1, 8, hide_ull(1LL<<7), "L_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu8i, L_BFu33_BFu8i)
//============================================================================


struct  L_BFu33_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 L_BFu33_BFu8ll) C1{ FL FL:33 FL:8}



static void Test_L_BFu33_BFu8ll()
{
  {
    init_simple_test("L_BFu33_BFu8ll");
    static STRUCT_IF_C L_BFu33_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 12, 1, 8, 1, "L_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 12, 1, 8, hide_ull(1LL<<7), "L_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu8ll, L_BFu33_BFu8ll)
//============================================================================


struct  L_BFu33_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 L_BFu33_BFu8s) C1{ FL FL:33 Fs:8}



static void Test_L_BFu33_BFu8s()
{
  {
    init_simple_test("L_BFu33_BFu8s");
    static STRUCT_IF_C L_BFu33_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 12, 1, 8, 1, "L_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 12, 1, 8, hide_ull(1LL<<7), "L_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu8s, L_BFu33_BFu8s)
//============================================================================


struct  L_BFu33_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 L_BFu33_BFu9i) C1{ FL FL:33 Fi:9}



static void Test_L_BFu33_BFu9i()
{
  {
    init_simple_test("L_BFu33_BFu9i");
    static STRUCT_IF_C L_BFu33_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 12, 1, 9, 1, "L_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 12, 1, 9, hide_ull(1LL<<8), "L_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu9i, L_BFu33_BFu9i)
//============================================================================


struct  L_BFu33_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 L_BFu33_BFu9ll) C1{ FL FL:33 FL:9}



static void Test_L_BFu33_BFu9ll()
{
  {
    init_simple_test("L_BFu33_BFu9ll");
    static STRUCT_IF_C L_BFu33_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 12, 1, 9, 1, "L_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 12, 1, 9, hide_ull(1LL<<8), "L_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu9ll, L_BFu33_BFu9ll)
//============================================================================


struct  L_BFu33_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 L_BFu33_BFu9s) C1{ FL FL:33 Fs:9}



static void Test_L_BFu33_BFu9s()
{
  {
    init_simple_test("L_BFu33_BFu9s");
    static STRUCT_IF_C L_BFu33_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 12, 1, 9, 1, "L_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 12, 1, 9, hide_ull(1LL<<8), "L_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu9s, L_BFu33_BFu9s)
//============================================================================


struct  L_BFu33_C  {
  __tsi64 v1;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 L_BFu33_C) C1{ FL FL:33 Fc}



static void Test_L_BFu33_C()
{
  {
    init_simple_test("L_BFu33_C");
    static STRUCT_IF_C L_BFu33_C lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_C)");
    check_field_offset(lv, v1, 0, "L_BFu33_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_C");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_C");
    check_field_offset(lv, v3, 13, "L_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_C, L_BFu33_C)
//============================================================================


struct  L_BFu33_D  {
  __tsi64 v1;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 L_BFu33_D) C1{ FL FL:33 FL}



static void Test_L_BFu33_D()
{
  {
    init_simple_test("L_BFu33_D");
    static STRUCT_IF_C L_BFu33_D lv;
    check2(sizeof(lv), 24, "sizeof(L_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_D)");
    check_field_offset(lv, v1, 0, "L_BFu33_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_D");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_D");
    check_field_offset(lv, v3, 16, "L_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_D, L_BFu33_D)
//============================================================================


struct  L_BFu33_F  {
  __tsi64 v1;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 L_BFu33_F) C1{ FL FL:33 Fi}



static void Test_L_BFu33_F()
{
  {
    init_simple_test("L_BFu33_F");
    static STRUCT_IF_C L_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_F)");
    check_field_offset(lv, v1, 0, "L_BFu33_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_F");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_F");
    check_field_offset(lv, v3, 16, "L_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_F, L_BFu33_F)
//============================================================================


struct  L_BFu33_I  {
  __tsi64 v1;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 L_BFu33_I) C1{ FL FL:33 Fi}



static void Test_L_BFu33_I()
{
  {
    init_simple_test("L_BFu33_I");
    static STRUCT_IF_C L_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_I)");
    check_field_offset(lv, v1, 0, "L_BFu33_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_I");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_I");
    check_field_offset(lv, v3, 16, "L_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_I, L_BFu33_I)
//============================================================================


struct  L_BFu33_Ip  {
  __tsi64 v1;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 L_BFu33_Ip) C1{ FL FL:33 Fp}



static void Test_L_BFu33_Ip()
{
  {
    init_simple_test("L_BFu33_Ip");
    static STRUCT_IF_C L_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu33_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Ip");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Ip");
    check_field_offset(lv, v3, 16, "L_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Ip, L_BFu33_Ip)
//============================================================================


struct  L_BFu33_L  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 L_BFu33_L) C1{ FL FL:33 FL}



static void Test_L_BFu33_L()
{
  {
    init_simple_test("L_BFu33_L");
    static STRUCT_IF_C L_BFu33_L lv;
    check2(sizeof(lv), 24, "sizeof(L_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_L)");
    check_field_offset(lv, v1, 0, "L_BFu33_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_L");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_L");
    check_field_offset(lv, v3, 16, "L_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_L, L_BFu33_L)
//============================================================================


struct  L_BFu33_S  {
  __tsi64 v1;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 L_BFu33_S) C1{ FL FL:33 Fs}



static void Test_L_BFu33_S()
{
  {
    init_simple_test("L_BFu33_S");
    static STRUCT_IF_C L_BFu33_S lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_S)");
    check_field_offset(lv, v1, 0, "L_BFu33_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_S");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_S");
    check_field_offset(lv, v3, 14, "L_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_S, L_BFu33_S)
//============================================================================


struct  L_BFu33_Uc  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 L_BFu33_Uc) C1{ FL FL:33 Fc}



static void Test_L_BFu33_Uc()
{
  {
    init_simple_test("L_BFu33_Uc");
    static STRUCT_IF_C L_BFu33_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu33_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Uc");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Uc");
    check_field_offset(lv, v3, 13, "L_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Uc, L_BFu33_Uc)
//============================================================================


struct  L_BFu33_Ui  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 L_BFu33_Ui) C1{ FL FL:33 Fi}



static void Test_L_BFu33_Ui()
{
  {
    init_simple_test("L_BFu33_Ui");
    static STRUCT_IF_C L_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu33_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Ui");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Ui");
    check_field_offset(lv, v3, 16, "L_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Ui, L_BFu33_Ui)
//============================================================================


struct  L_BFu33_Ul  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 L_BFu33_Ul) C1{ FL FL:33 FL}



static void Test_L_BFu33_Ul()
{
  {
    init_simple_test("L_BFu33_Ul");
    static STRUCT_IF_C L_BFu33_Ul lv;
    check2(sizeof(lv), 24, "sizeof(L_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu33_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Ul");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Ul");
    check_field_offset(lv, v3, 16, "L_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Ul, L_BFu33_Ul)
//============================================================================


struct  L_BFu33_Us  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 L_BFu33_Us) C1{ FL FL:33 Fs}



static void Test_L_BFu33_Us()
{
  {
    init_simple_test("L_BFu33_Us");
    static STRUCT_IF_C L_BFu33_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Us)");
    check_field_offset(lv, v1, 0, "L_BFu33_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Us");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Us");
    check_field_offset(lv, v3, 14, "L_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Us, L_BFu33_Us)
//============================================================================


struct  L_BFu33_Vp  {
  __tsi64 v1;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 L_BFu33_Vp) C1{ FL FL:33 Fp}



static void Test_L_BFu33_Vp()
{
  {
    init_simple_test("L_BFu33_Vp");
    static STRUCT_IF_C L_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu33_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_Vp");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_Vp");
    check_field_offset(lv, v3, 16, "L_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_Vp, L_BFu33_Vp)
//============================================================================


struct  L_BFu7c  {
  __tsi64 v1;
  unsigned char v2:7;
};
//SIG(1 L_BFu7c) C1{ FL Fc:7}



static void Test_L_BFu7c()
{
  {
    init_simple_test("L_BFu7c");
    static STRUCT_IF_C L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c, L_BFu7c)
//============================================================================


struct  L_BFu7c_BFu15i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 L_BFu7c_BFu15i) C1{ FL Fc:7 Fi:15}



static void Test_L_BFu7c_BFu15i()
{
  {
    init_simple_test("L_BFu7c_BFu15i");
    static STRUCT_IF_C L_BFu7c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu15i, L_BFu7c_BFu15i)
//============================================================================


struct  L_BFu7c_BFu15ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 L_BFu7c_BFu15ll) C1{ FL Fc:7 FL:15}



static void Test_L_BFu7c_BFu15ll()
{
  {
    init_simple_test("L_BFu7c_BFu15ll");
    static STRUCT_IF_C L_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu15ll, L_BFu7c_BFu15ll)
//============================================================================


struct  L_BFu7c_BFu15s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 L_BFu7c_BFu15s) C1{ FL Fc:7 Fs:15}



static void Test_L_BFu7c_BFu15s()
{
  {
    init_simple_test("L_BFu7c_BFu15s");
    static STRUCT_IF_C L_BFu7c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu15s, L_BFu7c_BFu15s)
//============================================================================


struct  L_BFu7c_BFu16i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 L_BFu7c_BFu16i) C1{ FL Fc:7 Fi:16}



static void Test_L_BFu7c_BFu16i()
{
  {
    init_simple_test("L_BFu7c_BFu16i");
    static STRUCT_IF_C L_BFu7c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu16i, L_BFu7c_BFu16i)
//============================================================================


struct  L_BFu7c_BFu16ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 L_BFu7c_BFu16ll) C1{ FL Fc:7 FL:16}



static void Test_L_BFu7c_BFu16ll()
{
  {
    init_simple_test("L_BFu7c_BFu16ll");
    static STRUCT_IF_C L_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu16ll, L_BFu7c_BFu16ll)
//============================================================================


struct  L_BFu7c_BFu16s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 L_BFu7c_BFu16s) C1{ FL Fc:7 Fs:16}



static void Test_L_BFu7c_BFu16s()
{
  {
    init_simple_test("L_BFu7c_BFu16s");
    static STRUCT_IF_C L_BFu7c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu16s, L_BFu7c_BFu16s)
//============================================================================


struct  L_BFu7c_BFu17i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 L_BFu7c_BFu17i) C1{ FL Fc:7 Fi:17}



static void Test_L_BFu7c_BFu17i()
{
  {
    init_simple_test("L_BFu7c_BFu17i");
    static STRUCT_IF_C L_BFu7c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu17i, L_BFu7c_BFu17i)
//============================================================================


struct  L_BFu7c_BFu17ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 L_BFu7c_BFu17ll) C1{ FL Fc:7 FL:17}



static void Test_L_BFu7c_BFu17ll()
{
  {
    init_simple_test("L_BFu7c_BFu17ll");
    static STRUCT_IF_C L_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu17ll, L_BFu7c_BFu17ll)
//============================================================================


struct  L_BFu7c_BFu1c  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 L_BFu7c_BFu1c) C1{ FL Fc:7 Fc:1}



static void Test_L_BFu7c_BFu1c()
{
  {
    init_simple_test("L_BFu7c_BFu1c");
    static STRUCT_IF_C L_BFu7c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu1c, L_BFu7c_BFu1c)
//============================================================================


struct  L_BFu7c_BFu1i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 L_BFu7c_BFu1i) C1{ FL Fc:7 Fi:1}



static void Test_L_BFu7c_BFu1i()
{
  {
    init_simple_test("L_BFu7c_BFu1i");
    static STRUCT_IF_C L_BFu7c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu1i, L_BFu7c_BFu1i)
//============================================================================


struct  L_BFu7c_BFu1ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 L_BFu7c_BFu1ll) C1{ FL Fc:7 FL:1}



static void Test_L_BFu7c_BFu1ll()
{
  {
    init_simple_test("L_BFu7c_BFu1ll");
    static STRUCT_IF_C L_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu1ll, L_BFu7c_BFu1ll)
//============================================================================


struct  L_BFu7c_BFu1s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 L_BFu7c_BFu1s) C1{ FL Fc:7 Fs:1}



static void Test_L_BFu7c_BFu1s()
{
  {
    init_simple_test("L_BFu7c_BFu1s");
    static STRUCT_IF_C L_BFu7c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu1s, L_BFu7c_BFu1s)
//============================================================================


struct  L_BFu7c_BFu31i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 L_BFu7c_BFu31i) C1{ FL Fc:7 Fi:31}



static void Test_L_BFu7c_BFu31i()
{
  {
    init_simple_test("L_BFu7c_BFu31i");
    static STRUCT_IF_C L_BFu7c_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu31i, L_BFu7c_BFu31i)
//============================================================================


struct  L_BFu7c_BFu31ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 L_BFu7c_BFu31ll) C1{ FL Fc:7 FL:31}



static void Test_L_BFu7c_BFu31ll()
{
  {
    init_simple_test("L_BFu7c_BFu31ll");
    static STRUCT_IF_C L_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, 1, "L_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, hide_ull(1LL<<30), "L_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu31ll, L_BFu7c_BFu31ll)
//============================================================================


struct  L_BFu7c_BFu32i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 L_BFu7c_BFu32i) C1{ FL Fc:7 Fi:32}



static void Test_L_BFu7c_BFu32i()
{
  {
    init_simple_test("L_BFu7c_BFu32i");
    static STRUCT_IF_C L_BFu7c_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu32i, L_BFu7c_BFu32i)
//============================================================================


struct  L_BFu7c_BFu32ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 L_BFu7c_BFu32ll) C1{ FL Fc:7 FL:32}



static void Test_L_BFu7c_BFu32ll()
{
  {
    init_simple_test("L_BFu7c_BFu32ll");
    static STRUCT_IF_C L_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, 1, "L_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, hide_ull(1LL<<31), "L_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu32ll, L_BFu7c_BFu32ll)
//============================================================================


struct  L_BFu7c_BFu33  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 L_BFu7c_BFu33) C1{ FL Fc:7 FL:33}



static void Test_L_BFu7c_BFu33()
{
  {
    init_simple_test("L_BFu7c_BFu33");
    static STRUCT_IF_C L_BFu7c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, 1, "L_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, hide_ull(1LL<<32), "L_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu33, L_BFu7c_BFu33)
//============================================================================


struct  L_BFu7c_BFu7c  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 L_BFu7c_BFu7c) C1{ FL Fc:7 Fc:7}



static void Test_L_BFu7c_BFu7c()
{
  {
    init_simple_test("L_BFu7c_BFu7c");
    static STRUCT_IF_C L_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu7c, L_BFu7c_BFu7c)
//============================================================================


struct  L_BFu7c_BFu7i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 L_BFu7c_BFu7i) C1{ FL Fc:7 Fi:7}



static void Test_L_BFu7c_BFu7i()
{
  {
    init_simple_test("L_BFu7c_BFu7i");
    static STRUCT_IF_C L_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu7i, L_BFu7c_BFu7i)
//============================================================================


struct  L_BFu7c_BFu7ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 L_BFu7c_BFu7ll) C1{ FL Fc:7 FL:7}



static void Test_L_BFu7c_BFu7ll()
{
  {
    init_simple_test("L_BFu7c_BFu7ll");
    static STRUCT_IF_C L_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu7ll, L_BFu7c_BFu7ll)
//============================================================================


struct  L_BFu7c_BFu7s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 L_BFu7c_BFu7s) C1{ FL Fc:7 Fs:7}



static void Test_L_BFu7c_BFu7s()
{
  {
    init_simple_test("L_BFu7c_BFu7s");
    static STRUCT_IF_C L_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu7s, L_BFu7c_BFu7s)
//============================================================================


struct  L_BFu7c_BFu8c  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 L_BFu7c_BFu8c) C1{ FL Fc:7 Fc:8}



static void Test_L_BFu7c_BFu8c()
{
  {
    init_simple_test("L_BFu7c_BFu8c");
    static STRUCT_IF_C L_BFu7c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu8c, L_BFu7c_BFu8c)
//============================================================================


struct  L_BFu7c_BFu8i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 L_BFu7c_BFu8i) C1{ FL Fc:7 Fi:8}



static void Test_L_BFu7c_BFu8i()
{
  {
    init_simple_test("L_BFu7c_BFu8i");
    static STRUCT_IF_C L_BFu7c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu8i, L_BFu7c_BFu8i)
//============================================================================


struct  L_BFu7c_BFu8ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 L_BFu7c_BFu8ll) C1{ FL Fc:7 FL:8}



static void Test_L_BFu7c_BFu8ll()
{
  {
    init_simple_test("L_BFu7c_BFu8ll");
    static STRUCT_IF_C L_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu8ll, L_BFu7c_BFu8ll)
//============================================================================


struct  L_BFu7c_BFu8s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 L_BFu7c_BFu8s) C1{ FL Fc:7 Fs:8}



static void Test_L_BFu7c_BFu8s()
{
  {
    init_simple_test("L_BFu7c_BFu8s");
    static STRUCT_IF_C L_BFu7c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu8s, L_BFu7c_BFu8s)
//============================================================================


struct  L_BFu7c_BFu9i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 L_BFu7c_BFu9i) C1{ FL Fc:7 Fi:9}



static void Test_L_BFu7c_BFu9i()
{
  {
    init_simple_test("L_BFu7c_BFu9i");
    static STRUCT_IF_C L_BFu7c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu9i, L_BFu7c_BFu9i)
//============================================================================


struct  L_BFu7c_BFu9ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 L_BFu7c_BFu9ll) C1{ FL Fc:7 FL:9}



static void Test_L_BFu7c_BFu9ll()
{
  {
    init_simple_test("L_BFu7c_BFu9ll");
    static STRUCT_IF_C L_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu9ll, L_BFu7c_BFu9ll)
//============================================================================


struct  L_BFu7c_BFu9s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 L_BFu7c_BFu9s) C1{ FL Fc:7 Fs:9}



static void Test_L_BFu7c_BFu9s()
{
  {
    init_simple_test("L_BFu7c_BFu9s");
    static STRUCT_IF_C L_BFu7c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu9s, L_BFu7c_BFu9s)
//============================================================================


struct  L_BFu7c_C  {
  __tsi64 v1;
  unsigned char v2:7;
  char v3;
};
//SIG(1 L_BFu7c_C) C1{ FL Fc:7 Fc}



static void Test_L_BFu7c_C()
{
  {
    init_simple_test("L_BFu7c_C");
    static STRUCT_IF_C L_BFu7c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_C)");
    check_field_offset(lv, v1, 0, "L_BFu7c_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_C");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_C");
    check_field_offset(lv, v3, 9, "L_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_C, L_BFu7c_C)
//============================================================================


struct  L_BFu7c_D  {
  __tsi64 v1;
  unsigned char v2:7;
  double v3;
};
//SIG(1 L_BFu7c_D) C1{ FL Fc:7 FL}



static void Test_L_BFu7c_D()
{
  {
    init_simple_test("L_BFu7c_D");
    static STRUCT_IF_C L_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_D)");
    check_field_offset(lv, v1, 0, "L_BFu7c_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_D");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_D, L_BFu7c_D)
//============================================================================


struct  L_BFu7c_F  {
  __tsi64 v1;
  unsigned char v2:7;
  float v3;
};
//SIG(1 L_BFu7c_F) C1{ FL Fc:7 Fi}



static void Test_L_BFu7c_F()
{
  {
    init_simple_test("L_BFu7c_F");
    static STRUCT_IF_C L_BFu7c_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_F)");
    check_field_offset(lv, v1, 0, "L_BFu7c_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_F");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_F");
    check_field_offset(lv, v3, 12, "L_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_F, L_BFu7c_F)
//============================================================================


struct  L_BFu7c_I  {
  __tsi64 v1;
  unsigned char v2:7;
  int v3;
};
//SIG(1 L_BFu7c_I) C1{ FL Fc:7 Fi}



static void Test_L_BFu7c_I()
{
  {
    init_simple_test("L_BFu7c_I");
    static STRUCT_IF_C L_BFu7c_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_I)");
    check_field_offset(lv, v1, 0, "L_BFu7c_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_I");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_I");
    check_field_offset(lv, v3, 12, "L_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_I, L_BFu7c_I)
//============================================================================


struct  L_BFu7c_Ip  {
  __tsi64 v1;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 L_BFu7c_Ip) C1{ FL Fc:7 Fp}



static void Test_L_BFu7c_Ip()
{
  {
    init_simple_test("L_BFu7c_Ip");
    static STRUCT_IF_C L_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Ip");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Ip, L_BFu7c_Ip)
//============================================================================


struct  L_BFu7c_L  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 L_BFu7c_L) C1{ FL Fc:7 FL}



static void Test_L_BFu7c_L()
{
  {
    init_simple_test("L_BFu7c_L");
    static STRUCT_IF_C L_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_L)");
    check_field_offset(lv, v1, 0, "L_BFu7c_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_L");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_L, L_BFu7c_L)
//============================================================================


struct  L_BFu7c_S  {
  __tsi64 v1;
  unsigned char v2:7;
  short v3;
};
//SIG(1 L_BFu7c_S) C1{ FL Fc:7 Fs}



static void Test_L_BFu7c_S()
{
  {
    init_simple_test("L_BFu7c_S");
    static STRUCT_IF_C L_BFu7c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_S)");
    check_field_offset(lv, v1, 0, "L_BFu7c_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_S");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_S");
    check_field_offset(lv, v3, 10, "L_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_S, L_BFu7c_S)
//============================================================================


struct  L_BFu7c_Uc  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 L_BFu7c_Uc) C1{ FL Fc:7 Fc}



static void Test_L_BFu7c_Uc()
{
  {
    init_simple_test("L_BFu7c_Uc");
    static STRUCT_IF_C L_BFu7c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Uc");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Uc");
    check_field_offset(lv, v3, 9, "L_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Uc, L_BFu7c_Uc)
//============================================================================


struct  L_BFu7c_Ui  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 L_BFu7c_Ui) C1{ FL Fc:7 Fi}



static void Test_L_BFu7c_Ui()
{
  {
    init_simple_test("L_BFu7c_Ui");
    static STRUCT_IF_C L_BFu7c_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Ui");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Ui");
    check_field_offset(lv, v3, 12, "L_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Ui, L_BFu7c_Ui)
//============================================================================


struct  L_BFu7c_Ul  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 L_BFu7c_Ul) C1{ FL Fc:7 FL}



static void Test_L_BFu7c_Ul()
{
  {
    init_simple_test("L_BFu7c_Ul");
    static STRUCT_IF_C L_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Ul");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Ul, L_BFu7c_Ul)
//============================================================================


struct  L_BFu7c_Us  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 L_BFu7c_Us) C1{ FL Fc:7 Fs}



static void Test_L_BFu7c_Us()
{
  {
    init_simple_test("L_BFu7c_Us");
    static STRUCT_IF_C L_BFu7c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Us)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Us");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Us");
    check_field_offset(lv, v3, 10, "L_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Us, L_BFu7c_Us)
//============================================================================


struct  L_BFu7c_Vp  {
  __tsi64 v1;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 L_BFu7c_Vp) C1{ FL Fc:7 Fp}



static void Test_L_BFu7c_Vp()
{
  {
    init_simple_test("L_BFu7c_Vp");
    static STRUCT_IF_C L_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu7c_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_Vp");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_Vp, L_BFu7c_Vp)
//============================================================================


struct  L_BFu7i  {
  __tsi64 v1;
  unsigned int v2:7;
};
//SIG(1 L_BFu7i) C1{ FL Fi:7}



static void Test_L_BFu7i()
{
  {
    init_simple_test("L_BFu7i");
    static STRUCT_IF_C L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i, L_BFu7i)
//============================================================================


struct  L_BFu7i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 L_BFu7i_BFu15i) C1{ FL Fi:7 Fi:15}



static void Test_L_BFu7i_BFu15i()
{
  {
    init_simple_test("L_BFu7i_BFu15i");
    static STRUCT_IF_C L_BFu7i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu15i, L_BFu7i_BFu15i)
//============================================================================


struct  L_BFu7i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 L_BFu7i_BFu15ll) C1{ FL Fi:7 FL:15}



static void Test_L_BFu7i_BFu15ll()
{
  {
    init_simple_test("L_BFu7i_BFu15ll");
    static STRUCT_IF_C L_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu15ll, L_BFu7i_BFu15ll)
//============================================================================


struct  L_BFu7i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 L_BFu7i_BFu15s) C1{ FL Fi:7 Fs:15}



static void Test_L_BFu7i_BFu15s()
{
  {
    init_simple_test("L_BFu7i_BFu15s");
    static STRUCT_IF_C L_BFu7i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu15s, L_BFu7i_BFu15s)
//============================================================================


struct  L_BFu7i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 L_BFu7i_BFu16i) C1{ FL Fi:7 Fi:16}



static void Test_L_BFu7i_BFu16i()
{
  {
    init_simple_test("L_BFu7i_BFu16i");
    static STRUCT_IF_C L_BFu7i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu16i, L_BFu7i_BFu16i)
//============================================================================


struct  L_BFu7i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 L_BFu7i_BFu16ll) C1{ FL Fi:7 FL:16}



static void Test_L_BFu7i_BFu16ll()
{
  {
    init_simple_test("L_BFu7i_BFu16ll");
    static STRUCT_IF_C L_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu16ll, L_BFu7i_BFu16ll)
//============================================================================


struct  L_BFu7i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 L_BFu7i_BFu16s) C1{ FL Fi:7 Fs:16}



static void Test_L_BFu7i_BFu16s()
{
  {
    init_simple_test("L_BFu7i_BFu16s");
    static STRUCT_IF_C L_BFu7i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu16s, L_BFu7i_BFu16s)
//============================================================================


struct  L_BFu7i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 L_BFu7i_BFu17i) C1{ FL Fi:7 Fi:17}



static void Test_L_BFu7i_BFu17i()
{
  {
    init_simple_test("L_BFu7i_BFu17i");
    static STRUCT_IF_C L_BFu7i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu17i, L_BFu7i_BFu17i)
//============================================================================


struct  L_BFu7i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 L_BFu7i_BFu17ll) C1{ FL Fi:7 FL:17}



static void Test_L_BFu7i_BFu17ll()
{
  {
    init_simple_test("L_BFu7i_BFu17ll");
    static STRUCT_IF_C L_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu17ll, L_BFu7i_BFu17ll)
//============================================================================


struct  L_BFu7i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 L_BFu7i_BFu1c) C1{ FL Fi:7 Fc:1}



static void Test_L_BFu7i_BFu1c()
{
  {
    init_simple_test("L_BFu7i_BFu1c");
    static STRUCT_IF_C L_BFu7i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu1c, L_BFu7i_BFu1c)
//============================================================================


struct  L_BFu7i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 L_BFu7i_BFu1i) C1{ FL Fi:7 Fi:1}



static void Test_L_BFu7i_BFu1i()
{
  {
    init_simple_test("L_BFu7i_BFu1i");
    static STRUCT_IF_C L_BFu7i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu1i, L_BFu7i_BFu1i)
//============================================================================


struct  L_BFu7i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 L_BFu7i_BFu1ll) C1{ FL Fi:7 FL:1}



static void Test_L_BFu7i_BFu1ll()
{
  {
    init_simple_test("L_BFu7i_BFu1ll");
    static STRUCT_IF_C L_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu1ll, L_BFu7i_BFu1ll)
//============================================================================


struct  L_BFu7i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 L_BFu7i_BFu1s) C1{ FL Fi:7 Fs:1}



static void Test_L_BFu7i_BFu1s()
{
  {
    init_simple_test("L_BFu7i_BFu1s");
    static STRUCT_IF_C L_BFu7i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu1s, L_BFu7i_BFu1s)
//============================================================================


struct  L_BFu7i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 L_BFu7i_BFu31i) C1{ FL Fi:7 Fi:31}



static void Test_L_BFu7i_BFu31i()
{
  {
    init_simple_test("L_BFu7i_BFu31i");
    static STRUCT_IF_C L_BFu7i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu31i, L_BFu7i_BFu31i)
//============================================================================


struct  L_BFu7i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 L_BFu7i_BFu31ll) C1{ FL Fi:7 FL:31}



static void Test_L_BFu7i_BFu31ll()
{
  {
    init_simple_test("L_BFu7i_BFu31ll");
    static STRUCT_IF_C L_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, 1, "L_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, hide_ull(1LL<<30), "L_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu31ll, L_BFu7i_BFu31ll)
//============================================================================


struct  L_BFu7i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 L_BFu7i_BFu32i) C1{ FL Fi:7 Fi:32}



static void Test_L_BFu7i_BFu32i()
{
  {
    init_simple_test("L_BFu7i_BFu32i");
    static STRUCT_IF_C L_BFu7i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu32i, L_BFu7i_BFu32i)
//============================================================================


struct  L_BFu7i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 L_BFu7i_BFu32ll) C1{ FL Fi:7 FL:32}



static void Test_L_BFu7i_BFu32ll()
{
  {
    init_simple_test("L_BFu7i_BFu32ll");
    static STRUCT_IF_C L_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, 1, "L_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, hide_ull(1LL<<31), "L_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu32ll, L_BFu7i_BFu32ll)
//============================================================================


struct  L_BFu7i_BFu33  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 L_BFu7i_BFu33) C1{ FL Fi:7 FL:33}



static void Test_L_BFu7i_BFu33()
{
  {
    init_simple_test("L_BFu7i_BFu33");
    static STRUCT_IF_C L_BFu7i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, 1, "L_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, hide_ull(1LL<<32), "L_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu33, L_BFu7i_BFu33)
//============================================================================


struct  L_BFu7i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 L_BFu7i_BFu7c) C1{ FL Fi:7 Fc:7}



static void Test_L_BFu7i_BFu7c()
{
  {
    init_simple_test("L_BFu7i_BFu7c");
    static STRUCT_IF_C L_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu7c, L_BFu7i_BFu7c)
//============================================================================


struct  L_BFu7i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 L_BFu7i_BFu7i) C1{ FL Fi:7 Fi:7}



static void Test_L_BFu7i_BFu7i()
{
  {
    init_simple_test("L_BFu7i_BFu7i");
    static STRUCT_IF_C L_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu7i, L_BFu7i_BFu7i)
//============================================================================


struct  L_BFu7i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 L_BFu7i_BFu7ll) C1{ FL Fi:7 FL:7}



static void Test_L_BFu7i_BFu7ll()
{
  {
    init_simple_test("L_BFu7i_BFu7ll");
    static STRUCT_IF_C L_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu7ll, L_BFu7i_BFu7ll)
//============================================================================


struct  L_BFu7i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 L_BFu7i_BFu7s) C1{ FL Fi:7 Fs:7}



static void Test_L_BFu7i_BFu7s()
{
  {
    init_simple_test("L_BFu7i_BFu7s");
    static STRUCT_IF_C L_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu7s, L_BFu7i_BFu7s)
//============================================================================


struct  L_BFu7i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 L_BFu7i_BFu8c) C1{ FL Fi:7 Fc:8}



static void Test_L_BFu7i_BFu8c()
{
  {
    init_simple_test("L_BFu7i_BFu8c");
    static STRUCT_IF_C L_BFu7i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu8c, L_BFu7i_BFu8c)
//============================================================================


struct  L_BFu7i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 L_BFu7i_BFu8i) C1{ FL Fi:7 Fi:8}



static void Test_L_BFu7i_BFu8i()
{
  {
    init_simple_test("L_BFu7i_BFu8i");
    static STRUCT_IF_C L_BFu7i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu8i, L_BFu7i_BFu8i)
//============================================================================


struct  L_BFu7i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 L_BFu7i_BFu8ll) C1{ FL Fi:7 FL:8}



static void Test_L_BFu7i_BFu8ll()
{
  {
    init_simple_test("L_BFu7i_BFu8ll");
    static STRUCT_IF_C L_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu8ll, L_BFu7i_BFu8ll)
//============================================================================


struct  L_BFu7i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 L_BFu7i_BFu8s) C1{ FL Fi:7 Fs:8}



static void Test_L_BFu7i_BFu8s()
{
  {
    init_simple_test("L_BFu7i_BFu8s");
    static STRUCT_IF_C L_BFu7i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu8s, L_BFu7i_BFu8s)
//============================================================================


struct  L_BFu7i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 L_BFu7i_BFu9i) C1{ FL Fi:7 Fi:9}



static void Test_L_BFu7i_BFu9i()
{
  {
    init_simple_test("L_BFu7i_BFu9i");
    static STRUCT_IF_C L_BFu7i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu9i, L_BFu7i_BFu9i)
//============================================================================


struct  L_BFu7i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 L_BFu7i_BFu9ll) C1{ FL Fi:7 FL:9}



static void Test_L_BFu7i_BFu9ll()
{
  {
    init_simple_test("L_BFu7i_BFu9ll");
    static STRUCT_IF_C L_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu9ll, L_BFu7i_BFu9ll)
//============================================================================


struct  L_BFu7i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 L_BFu7i_BFu9s) C1{ FL Fi:7 Fs:9}



static void Test_L_BFu7i_BFu9s()
{
  {
    init_simple_test("L_BFu7i_BFu9s");
    static STRUCT_IF_C L_BFu7i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu9s, L_BFu7i_BFu9s)
//============================================================================


struct  L_BFu7i_C  {
  __tsi64 v1;
  unsigned int v2:7;
  char v3;
};
//SIG(1 L_BFu7i_C) C1{ FL Fi:7 Fc}



static void Test_L_BFu7i_C()
{
  {
    init_simple_test("L_BFu7i_C");
    static STRUCT_IF_C L_BFu7i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_C)");
    check_field_offset(lv, v1, 0, "L_BFu7i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_C");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_C");
    check_field_offset(lv, v3, 9, "L_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_C, L_BFu7i_C)
//============================================================================


struct  L_BFu7i_D  {
  __tsi64 v1;
  unsigned int v2:7;
  double v3;
};
//SIG(1 L_BFu7i_D) C1{ FL Fi:7 FL}



static void Test_L_BFu7i_D()
{
  {
    init_simple_test("L_BFu7i_D");
    static STRUCT_IF_C L_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_D)");
    check_field_offset(lv, v1, 0, "L_BFu7i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_D");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_D, L_BFu7i_D)
//============================================================================


struct  L_BFu7i_F  {
  __tsi64 v1;
  unsigned int v2:7;
  float v3;
};
//SIG(1 L_BFu7i_F) C1{ FL Fi:7 Fi}



static void Test_L_BFu7i_F()
{
  {
    init_simple_test("L_BFu7i_F");
    static STRUCT_IF_C L_BFu7i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_F)");
    check_field_offset(lv, v1, 0, "L_BFu7i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_F");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_F");
    check_field_offset(lv, v3, 12, "L_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_F, L_BFu7i_F)
//============================================================================


struct  L_BFu7i_I  {
  __tsi64 v1;
  unsigned int v2:7;
  int v3;
};
//SIG(1 L_BFu7i_I) C1{ FL Fi:7 Fi}



static void Test_L_BFu7i_I()
{
  {
    init_simple_test("L_BFu7i_I");
    static STRUCT_IF_C L_BFu7i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_I)");
    check_field_offset(lv, v1, 0, "L_BFu7i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_I");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_I");
    check_field_offset(lv, v3, 12, "L_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_I, L_BFu7i_I)
//============================================================================


struct  L_BFu7i_Ip  {
  __tsi64 v1;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 L_BFu7i_Ip) C1{ FL Fi:7 Fp}



static void Test_L_BFu7i_Ip()
{
  {
    init_simple_test("L_BFu7i_Ip");
    static STRUCT_IF_C L_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Ip, L_BFu7i_Ip)
//============================================================================


struct  L_BFu7i_L  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 L_BFu7i_L) C1{ FL Fi:7 FL}



static void Test_L_BFu7i_L()
{
  {
    init_simple_test("L_BFu7i_L");
    static STRUCT_IF_C L_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_L)");
    check_field_offset(lv, v1, 0, "L_BFu7i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_L");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_L, L_BFu7i_L)
//============================================================================


struct  L_BFu7i_S  {
  __tsi64 v1;
  unsigned int v2:7;
  short v3;
};
//SIG(1 L_BFu7i_S) C1{ FL Fi:7 Fs}



static void Test_L_BFu7i_S()
{
  {
    init_simple_test("L_BFu7i_S");
    static STRUCT_IF_C L_BFu7i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_S)");
    check_field_offset(lv, v1, 0, "L_BFu7i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_S");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_S");
    check_field_offset(lv, v3, 10, "L_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_S, L_BFu7i_S)
//============================================================================


struct  L_BFu7i_Uc  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 L_BFu7i_Uc) C1{ FL Fi:7 Fc}



static void Test_L_BFu7i_Uc()
{
  {
    init_simple_test("L_BFu7i_Uc");
    static STRUCT_IF_C L_BFu7i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Uc");
    check_field_offset(lv, v3, 9, "L_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Uc, L_BFu7i_Uc)
//============================================================================


struct  L_BFu7i_Ui  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 L_BFu7i_Ui) C1{ FL Fi:7 Fi}



static void Test_L_BFu7i_Ui()
{
  {
    init_simple_test("L_BFu7i_Ui");
    static STRUCT_IF_C L_BFu7i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Ui, L_BFu7i_Ui)
//============================================================================


struct  L_BFu7i_Ul  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 L_BFu7i_Ul) C1{ FL Fi:7 FL}



static void Test_L_BFu7i_Ul()
{
  {
    init_simple_test("L_BFu7i_Ul");
    static STRUCT_IF_C L_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Ul, L_BFu7i_Ul)
//============================================================================


struct  L_BFu7i_Us  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 L_BFu7i_Us) C1{ FL Fi:7 Fs}



static void Test_L_BFu7i_Us()
{
  {
    init_simple_test("L_BFu7i_Us");
    static STRUCT_IF_C L_BFu7i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Us");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Us");
    check_field_offset(lv, v3, 10, "L_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Us, L_BFu7i_Us)
//============================================================================


struct  L_BFu7i_Vp  {
  __tsi64 v1;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 L_BFu7i_Vp) C1{ FL Fi:7 Fp}



static void Test_L_BFu7i_Vp()
{
  {
    init_simple_test("L_BFu7i_Vp");
    static STRUCT_IF_C L_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu7i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_Vp, L_BFu7i_Vp)
//============================================================================


struct  L_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:7;
};
//SIG(1 L_BFu7ll) C1{ FL FL:7}



static void Test_L_BFu7ll()
{
  {
    init_simple_test("L_BFu7ll");
    static STRUCT_IF_C L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll, L_BFu7ll)
//============================================================================


struct  L_BFu7ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 L_BFu7ll_BFu15i) C1{ FL FL:7 Fi:15}



static void Test_L_BFu7ll_BFu15i()
{
  {
    init_simple_test("L_BFu7ll_BFu15i");
    static STRUCT_IF_C L_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu15i, L_BFu7ll_BFu15i)
//============================================================================


struct  L_BFu7ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 L_BFu7ll_BFu15ll) C1{ FL FL:7 FL:15}



static void Test_L_BFu7ll_BFu15ll()
{
  {
    init_simple_test("L_BFu7ll_BFu15ll");
    static STRUCT_IF_C L_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu15ll, L_BFu7ll_BFu15ll)
//============================================================================


struct  L_BFu7ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 L_BFu7ll_BFu15s) C1{ FL FL:7 Fs:15}



static void Test_L_BFu7ll_BFu15s()
{
  {
    init_simple_test("L_BFu7ll_BFu15s");
    static STRUCT_IF_C L_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu15s, L_BFu7ll_BFu15s)
//============================================================================


struct  L_BFu7ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 L_BFu7ll_BFu16i) C1{ FL FL:7 Fi:16}



static void Test_L_BFu7ll_BFu16i()
{
  {
    init_simple_test("L_BFu7ll_BFu16i");
    static STRUCT_IF_C L_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu16i, L_BFu7ll_BFu16i)
//============================================================================


struct  L_BFu7ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 L_BFu7ll_BFu16ll) C1{ FL FL:7 FL:16}



static void Test_L_BFu7ll_BFu16ll()
{
  {
    init_simple_test("L_BFu7ll_BFu16ll");
    static STRUCT_IF_C L_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu16ll, L_BFu7ll_BFu16ll)
//============================================================================


struct  L_BFu7ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 L_BFu7ll_BFu16s) C1{ FL FL:7 Fs:16}



static void Test_L_BFu7ll_BFu16s()
{
  {
    init_simple_test("L_BFu7ll_BFu16s");
    static STRUCT_IF_C L_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu16s, L_BFu7ll_BFu16s)
//============================================================================


struct  L_BFu7ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 L_BFu7ll_BFu17i) C1{ FL FL:7 Fi:17}



static void Test_L_BFu7ll_BFu17i()
{
  {
    init_simple_test("L_BFu7ll_BFu17i");
    static STRUCT_IF_C L_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu17i, L_BFu7ll_BFu17i)
//============================================================================


struct  L_BFu7ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 L_BFu7ll_BFu17ll) C1{ FL FL:7 FL:17}



static void Test_L_BFu7ll_BFu17ll()
{
  {
    init_simple_test("L_BFu7ll_BFu17ll");
    static STRUCT_IF_C L_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu17ll, L_BFu7ll_BFu17ll)
//============================================================================


struct  L_BFu7ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 L_BFu7ll_BFu1c) C1{ FL FL:7 Fc:1}



static void Test_L_BFu7ll_BFu1c()
{
  {
    init_simple_test("L_BFu7ll_BFu1c");
    static STRUCT_IF_C L_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu1c, L_BFu7ll_BFu1c)
//============================================================================


struct  L_BFu7ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 L_BFu7ll_BFu1i) C1{ FL FL:7 Fi:1}



static void Test_L_BFu7ll_BFu1i()
{
  {
    init_simple_test("L_BFu7ll_BFu1i");
    static STRUCT_IF_C L_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu1i, L_BFu7ll_BFu1i)
//============================================================================


struct  L_BFu7ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 L_BFu7ll_BFu1ll) C1{ FL FL:7 FL:1}



static void Test_L_BFu7ll_BFu1ll()
{
  {
    init_simple_test("L_BFu7ll_BFu1ll");
    static STRUCT_IF_C L_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu1ll, L_BFu7ll_BFu1ll)
//============================================================================


struct  L_BFu7ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 L_BFu7ll_BFu1s) C1{ FL FL:7 Fs:1}



static void Test_L_BFu7ll_BFu1s()
{
  {
    init_simple_test("L_BFu7ll_BFu1s");
    static STRUCT_IF_C L_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu1s, L_BFu7ll_BFu1s)
//============================================================================


struct  L_BFu7ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 L_BFu7ll_BFu31i) C1{ FL FL:7 Fi:31}



static void Test_L_BFu7ll_BFu31i()
{
  {
    init_simple_test("L_BFu7ll_BFu31i");
    static STRUCT_IF_C L_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu31i, L_BFu7ll_BFu31i)
//============================================================================


struct  L_BFu7ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 L_BFu7ll_BFu31ll) C1{ FL FL:7 FL:31}



static void Test_L_BFu7ll_BFu31ll()
{
  {
    init_simple_test("L_BFu7ll_BFu31ll");
    static STRUCT_IF_C L_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, 1, "L_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, hide_ull(1LL<<30), "L_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu31ll, L_BFu7ll_BFu31ll)
//============================================================================


struct  L_BFu7ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 L_BFu7ll_BFu32i) C1{ FL FL:7 Fi:32}



static void Test_L_BFu7ll_BFu32i()
{
  {
    init_simple_test("L_BFu7ll_BFu32i");
    static STRUCT_IF_C L_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu32i, L_BFu7ll_BFu32i)
//============================================================================


struct  L_BFu7ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 L_BFu7ll_BFu32ll) C1{ FL FL:7 FL:32}



static void Test_L_BFu7ll_BFu32ll()
{
  {
    init_simple_test("L_BFu7ll_BFu32ll");
    static STRUCT_IF_C L_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, 1, "L_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, hide_ull(1LL<<31), "L_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu32ll, L_BFu7ll_BFu32ll)
//============================================================================


struct  L_BFu7ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 L_BFu7ll_BFu33) C1{ FL FL:7 FL:33}



static void Test_L_BFu7ll_BFu33()
{
  {
    init_simple_test("L_BFu7ll_BFu33");
    static STRUCT_IF_C L_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, 1, "L_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, hide_ull(1LL<<32), "L_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu33, L_BFu7ll_BFu33)
//============================================================================


struct  L_BFu7ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 L_BFu7ll_BFu7c) C1{ FL FL:7 Fc:7}



static void Test_L_BFu7ll_BFu7c()
{
  {
    init_simple_test("L_BFu7ll_BFu7c");
    static STRUCT_IF_C L_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu7c, L_BFu7ll_BFu7c)
//============================================================================


struct  L_BFu7ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 L_BFu7ll_BFu7i) C1{ FL FL:7 Fi:7}



static void Test_L_BFu7ll_BFu7i()
{
  {
    init_simple_test("L_BFu7ll_BFu7i");
    static STRUCT_IF_C L_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu7i, L_BFu7ll_BFu7i)
//============================================================================


struct  L_BFu7ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 L_BFu7ll_BFu7ll) C1{ FL FL:7 FL:7}



static void Test_L_BFu7ll_BFu7ll()
{
  {
    init_simple_test("L_BFu7ll_BFu7ll");
    static STRUCT_IF_C L_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu7ll, L_BFu7ll_BFu7ll)
//============================================================================


struct  L_BFu7ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 L_BFu7ll_BFu7s) C1{ FL FL:7 Fs:7}



static void Test_L_BFu7ll_BFu7s()
{
  {
    init_simple_test("L_BFu7ll_BFu7s");
    static STRUCT_IF_C L_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu7s, L_BFu7ll_BFu7s)
//============================================================================


struct  L_BFu7ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 L_BFu7ll_BFu8c) C1{ FL FL:7 Fc:8}



static void Test_L_BFu7ll_BFu8c()
{
  {
    init_simple_test("L_BFu7ll_BFu8c");
    static STRUCT_IF_C L_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu8c, L_BFu7ll_BFu8c)
//============================================================================


struct  L_BFu7ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 L_BFu7ll_BFu8i) C1{ FL FL:7 Fi:8}



static void Test_L_BFu7ll_BFu8i()
{
  {
    init_simple_test("L_BFu7ll_BFu8i");
    static STRUCT_IF_C L_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu8i, L_BFu7ll_BFu8i)
//============================================================================


struct  L_BFu7ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 L_BFu7ll_BFu8ll) C1{ FL FL:7 FL:8}



static void Test_L_BFu7ll_BFu8ll()
{
  {
    init_simple_test("L_BFu7ll_BFu8ll");
    static STRUCT_IF_C L_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu8ll, L_BFu7ll_BFu8ll)
//============================================================================


struct  L_BFu7ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 L_BFu7ll_BFu8s) C1{ FL FL:7 Fs:8}



static void Test_L_BFu7ll_BFu8s()
{
  {
    init_simple_test("L_BFu7ll_BFu8s");
    static STRUCT_IF_C L_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu8s, L_BFu7ll_BFu8s)
//============================================================================


struct  L_BFu7ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 L_BFu7ll_BFu9i) C1{ FL FL:7 Fi:9}



static void Test_L_BFu7ll_BFu9i()
{
  {
    init_simple_test("L_BFu7ll_BFu9i");
    static STRUCT_IF_C L_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu9i, L_BFu7ll_BFu9i)
//============================================================================


struct  L_BFu7ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 L_BFu7ll_BFu9ll) C1{ FL FL:7 FL:9}



static void Test_L_BFu7ll_BFu9ll()
{
  {
    init_simple_test("L_BFu7ll_BFu9ll");
    static STRUCT_IF_C L_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu9ll, L_BFu7ll_BFu9ll)
//============================================================================


struct  L_BFu7ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 L_BFu7ll_BFu9s) C1{ FL FL:7 Fs:9}



static void Test_L_BFu7ll_BFu9s()
{
  {
    init_simple_test("L_BFu7ll_BFu9s");
    static STRUCT_IF_C L_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu9s, L_BFu7ll_BFu9s)
//============================================================================


struct  L_BFu7ll_C  {
  __tsi64 v1;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 L_BFu7ll_C) C1{ FL FL:7 Fc}



static void Test_L_BFu7ll_C()
{
  {
    init_simple_test("L_BFu7ll_C");
    static STRUCT_IF_C L_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_C");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_C");
    check_field_offset(lv, v3, 9, "L_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_C, L_BFu7ll_C)
//============================================================================


struct  L_BFu7ll_D  {
  __tsi64 v1;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 L_BFu7ll_D) C1{ FL FL:7 FL}



static void Test_L_BFu7ll_D()
{
  {
    init_simple_test("L_BFu7ll_D");
    static STRUCT_IF_C L_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_D");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_D, L_BFu7ll_D)
//============================================================================


struct  L_BFu7ll_F  {
  __tsi64 v1;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 L_BFu7ll_F) C1{ FL FL:7 Fi}



static void Test_L_BFu7ll_F()
{
  {
    init_simple_test("L_BFu7ll_F");
    static STRUCT_IF_C L_BFu7ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_F");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_F");
    check_field_offset(lv, v3, 12, "L_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_F, L_BFu7ll_F)
//============================================================================


struct  L_BFu7ll_I  {
  __tsi64 v1;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 L_BFu7ll_I) C1{ FL FL:7 Fi}



static void Test_L_BFu7ll_I()
{
  {
    init_simple_test("L_BFu7ll_I");
    static STRUCT_IF_C L_BFu7ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_I");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_I");
    check_field_offset(lv, v3, 12, "L_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_I, L_BFu7ll_I)
//============================================================================


struct  L_BFu7ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 L_BFu7ll_Ip) C1{ FL FL:7 Fp}



static void Test_L_BFu7ll_Ip()
{
  {
    init_simple_test("L_BFu7ll_Ip");
    static STRUCT_IF_C L_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Ip, L_BFu7ll_Ip)
//============================================================================


struct  L_BFu7ll_L  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 L_BFu7ll_L) C1{ FL FL:7 FL}



static void Test_L_BFu7ll_L()
{
  {
    init_simple_test("L_BFu7ll_L");
    static STRUCT_IF_C L_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_L");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_L, L_BFu7ll_L)
//============================================================================


struct  L_BFu7ll_S  {
  __tsi64 v1;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 L_BFu7ll_S) C1{ FL FL:7 Fs}



static void Test_L_BFu7ll_S()
{
  {
    init_simple_test("L_BFu7ll_S");
    static STRUCT_IF_C L_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_S");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_S");
    check_field_offset(lv, v3, 10, "L_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_S, L_BFu7ll_S)
//============================================================================


struct  L_BFu7ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 L_BFu7ll_Uc) C1{ FL FL:7 Fc}



static void Test_L_BFu7ll_Uc()
{
  {
    init_simple_test("L_BFu7ll_Uc");
    static STRUCT_IF_C L_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Uc");
    check_field_offset(lv, v3, 9, "L_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Uc, L_BFu7ll_Uc)
//============================================================================


struct  L_BFu7ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 L_BFu7ll_Ui) C1{ FL FL:7 Fi}



static void Test_L_BFu7ll_Ui()
{
  {
    init_simple_test("L_BFu7ll_Ui");
    static STRUCT_IF_C L_BFu7ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Ui, L_BFu7ll_Ui)
//============================================================================


struct  L_BFu7ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 L_BFu7ll_Ul) C1{ FL FL:7 FL}



static void Test_L_BFu7ll_Ul()
{
  {
    init_simple_test("L_BFu7ll_Ul");
    static STRUCT_IF_C L_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Ul, L_BFu7ll_Ul)
//============================================================================


struct  L_BFu7ll_Us  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 L_BFu7ll_Us) C1{ FL FL:7 Fs}



static void Test_L_BFu7ll_Us()
{
  {
    init_simple_test("L_BFu7ll_Us");
    static STRUCT_IF_C L_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Us, L_BFu7ll_Us)
//============================================================================


struct  L_BFu7ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 L_BFu7ll_Vp) C1{ FL FL:7 Fp}



static void Test_L_BFu7ll_Vp()
{
  {
    init_simple_test("L_BFu7ll_Vp");
    static STRUCT_IF_C L_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_Vp, L_BFu7ll_Vp)
//============================================================================


struct  L_BFu7s  {
  __tsi64 v1;
  unsigned short v2:7;
};
//SIG(1 L_BFu7s) C1{ FL Fs:7}



static void Test_L_BFu7s()
{
  {
    init_simple_test("L_BFu7s");
    static STRUCT_IF_C L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s, L_BFu7s)
//============================================================================


struct  L_BFu7s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 L_BFu7s_BFu15i) C1{ FL Fs:7 Fi:15}



static void Test_L_BFu7s_BFu15i()
{
  {
    init_simple_test("L_BFu7s_BFu15i");
    static STRUCT_IF_C L_BFu7s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu15i, L_BFu7s_BFu15i)
//============================================================================


struct  L_BFu7s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 L_BFu7s_BFu15ll) C1{ FL Fs:7 FL:15}



static void Test_L_BFu7s_BFu15ll()
{
  {
    init_simple_test("L_BFu7s_BFu15ll");
    static STRUCT_IF_C L_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, 1, "L_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 8, 7, 15, hide_ull(1LL<<14), "L_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu15ll, L_BFu7s_BFu15ll)
//============================================================================


struct  L_BFu7s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 L_BFu7s_BFu15s) C1{ FL Fs:7 Fs:15}



static void Test_L_BFu7s_BFu15s()
{
  {
    init_simple_test("L_BFu7s_BFu15s");
    static STRUCT_IF_C L_BFu7s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu15s, L_BFu7s_BFu15s)
//============================================================================


struct  L_BFu7s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 L_BFu7s_BFu16i) C1{ FL Fs:7 Fi:16}



static void Test_L_BFu7s_BFu16i()
{
  {
    init_simple_test("L_BFu7s_BFu16i");
    static STRUCT_IF_C L_BFu7s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu16i, L_BFu7s_BFu16i)
//============================================================================


struct  L_BFu7s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 L_BFu7s_BFu16ll) C1{ FL Fs:7 FL:16}



static void Test_L_BFu7s_BFu16ll()
{
  {
    init_simple_test("L_BFu7s_BFu16ll");
    static STRUCT_IF_C L_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, 1, "L_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 8, 7, 16, hide_ull(1LL<<15), "L_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu16ll, L_BFu7s_BFu16ll)
//============================================================================


struct  L_BFu7s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 L_BFu7s_BFu16s) C1{ FL Fs:7 Fs:16}



static void Test_L_BFu7s_BFu16s()
{
  {
    init_simple_test("L_BFu7s_BFu16s");
    static STRUCT_IF_C L_BFu7s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu16s, L_BFu7s_BFu16s)
//============================================================================


struct  L_BFu7s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 L_BFu7s_BFu17i) C1{ FL Fs:7 Fi:17}



static void Test_L_BFu7s_BFu17i()
{
  {
    init_simple_test("L_BFu7s_BFu17i");
    static STRUCT_IF_C L_BFu7s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu17i, L_BFu7s_BFu17i)
//============================================================================


struct  L_BFu7s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 L_BFu7s_BFu17ll) C1{ FL Fs:7 FL:17}



static void Test_L_BFu7s_BFu17ll()
{
  {
    init_simple_test("L_BFu7s_BFu17ll");
    static STRUCT_IF_C L_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, 1, "L_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 8, 7, 17, hide_ull(1LL<<16), "L_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu17ll, L_BFu7s_BFu17ll)
//============================================================================


struct  L_BFu7s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 L_BFu7s_BFu1c) C1{ FL Fs:7 Fc:1}



static void Test_L_BFu7s_BFu1c()
{
  {
    init_simple_test("L_BFu7s_BFu1c");
    static STRUCT_IF_C L_BFu7s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu1c, L_BFu7s_BFu1c)
//============================================================================


struct  L_BFu7s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 L_BFu7s_BFu1i) C1{ FL Fs:7 Fi:1}



static void Test_L_BFu7s_BFu1i()
{
  {
    init_simple_test("L_BFu7s_BFu1i");
    static STRUCT_IF_C L_BFu7s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu1i, L_BFu7s_BFu1i)
//============================================================================


struct  L_BFu7s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 L_BFu7s_BFu1ll) C1{ FL Fs:7 FL:1}



static void Test_L_BFu7s_BFu1ll()
{
  {
    init_simple_test("L_BFu7s_BFu1ll");
    static STRUCT_IF_C L_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu1ll, L_BFu7s_BFu1ll)
//============================================================================


struct  L_BFu7s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 L_BFu7s_BFu1s) C1{ FL Fs:7 Fs:1}



static void Test_L_BFu7s_BFu1s()
{
  {
    init_simple_test("L_BFu7s_BFu1s");
    static STRUCT_IF_C L_BFu7s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 8, 7, 1, 1, "L_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu1s, L_BFu7s_BFu1s)
//============================================================================


struct  L_BFu7s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 L_BFu7s_BFu31i) C1{ FL Fs:7 Fi:31}



static void Test_L_BFu7s_BFu31i()
{
  {
    init_simple_test("L_BFu7s_BFu31i");
    static STRUCT_IF_C L_BFu7s_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu31i, L_BFu7s_BFu31i)
//============================================================================


struct  L_BFu7s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 L_BFu7s_BFu31ll) C1{ FL Fs:7 FL:31}



static void Test_L_BFu7s_BFu31ll()
{
  {
    init_simple_test("L_BFu7s_BFu31ll");
    static STRUCT_IF_C L_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, 1, "L_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 8, 7, 31, hide_ull(1LL<<30), "L_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu31ll, L_BFu7s_BFu31ll)
//============================================================================


struct  L_BFu7s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 L_BFu7s_BFu32i) C1{ FL Fs:7 Fi:32}



static void Test_L_BFu7s_BFu32i()
{
  {
    init_simple_test("L_BFu7s_BFu32i");
    static STRUCT_IF_C L_BFu7s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu32i, L_BFu7s_BFu32i)
//============================================================================


struct  L_BFu7s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 L_BFu7s_BFu32ll) C1{ FL Fs:7 FL:32}



static void Test_L_BFu7s_BFu32ll()
{
  {
    init_simple_test("L_BFu7s_BFu32ll");
    static STRUCT_IF_C L_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, 1, "L_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 8, 7, 32, hide_ull(1LL<<31), "L_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu32ll, L_BFu7s_BFu32ll)
//============================================================================


struct  L_BFu7s_BFu33  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 L_BFu7s_BFu33) C1{ FL Fs:7 FL:33}



static void Test_L_BFu7s_BFu33()
{
  {
    init_simple_test("L_BFu7s_BFu33");
    static STRUCT_IF_C L_BFu7s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, 1, "L_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 8, 7, 33, hide_ull(1LL<<32), "L_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu33, L_BFu7s_BFu33)
//============================================================================


struct  L_BFu7s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 L_BFu7s_BFu7c) C1{ FL Fs:7 Fc:7}



static void Test_L_BFu7s_BFu7c()
{
  {
    init_simple_test("L_BFu7s_BFu7c");
    static STRUCT_IF_C L_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu7c, L_BFu7s_BFu7c)
//============================================================================


struct  L_BFu7s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 L_BFu7s_BFu7i) C1{ FL Fs:7 Fi:7}



static void Test_L_BFu7s_BFu7i()
{
  {
    init_simple_test("L_BFu7s_BFu7i");
    static STRUCT_IF_C L_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu7i, L_BFu7s_BFu7i)
//============================================================================


struct  L_BFu7s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 L_BFu7s_BFu7ll) C1{ FL Fs:7 FL:7}



static void Test_L_BFu7s_BFu7ll()
{
  {
    init_simple_test("L_BFu7s_BFu7ll");
    static STRUCT_IF_C L_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu7ll, L_BFu7s_BFu7ll)
//============================================================================


struct  L_BFu7s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 L_BFu7s_BFu7s) C1{ FL Fs:7 Fs:7}



static void Test_L_BFu7s_BFu7s()
{
  {
    init_simple_test("L_BFu7s_BFu7s");
    static STRUCT_IF_C L_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, 1, "L_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 8, 7, 7, hide_ull(1LL<<6), "L_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu7s, L_BFu7s_BFu7s)
//============================================================================


struct  L_BFu7s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 L_BFu7s_BFu8c) C1{ FL Fs:7 Fc:8}



static void Test_L_BFu7s_BFu8c()
{
  {
    init_simple_test("L_BFu7s_BFu8c");
    static STRUCT_IF_C L_BFu7s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu8c, L_BFu7s_BFu8c)
//============================================================================


struct  L_BFu7s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 L_BFu7s_BFu8i) C1{ FL Fs:7 Fi:8}



static void Test_L_BFu7s_BFu8i()
{
  {
    init_simple_test("L_BFu7s_BFu8i");
    static STRUCT_IF_C L_BFu7s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu8i, L_BFu7s_BFu8i)
//============================================================================


struct  L_BFu7s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 L_BFu7s_BFu8ll) C1{ FL Fs:7 FL:8}



static void Test_L_BFu7s_BFu8ll()
{
  {
    init_simple_test("L_BFu7s_BFu8ll");
    static STRUCT_IF_C L_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu8ll, L_BFu7s_BFu8ll)
//============================================================================


struct  L_BFu7s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 L_BFu7s_BFu8s) C1{ FL Fs:7 Fs:8}



static void Test_L_BFu7s_BFu8s()
{
  {
    init_simple_test("L_BFu7s_BFu8s");
    static STRUCT_IF_C L_BFu7s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, 1, "L_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 8, 7, 8, hide_ull(1LL<<7), "L_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu8s, L_BFu7s_BFu8s)
//============================================================================


struct  L_BFu7s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 L_BFu7s_BFu9i) C1{ FL Fs:7 Fi:9}



static void Test_L_BFu7s_BFu9i()
{
  {
    init_simple_test("L_BFu7s_BFu9i");
    static STRUCT_IF_C L_BFu7s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu9i, L_BFu7s_BFu9i)
//============================================================================


struct  L_BFu7s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 L_BFu7s_BFu9ll) C1{ FL Fs:7 FL:9}



static void Test_L_BFu7s_BFu9ll()
{
  {
    init_simple_test("L_BFu7s_BFu9ll");
    static STRUCT_IF_C L_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu9ll, L_BFu7s_BFu9ll)
//============================================================================


struct  L_BFu7s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 L_BFu7s_BFu9s) C1{ FL Fs:7 Fs:9}



static void Test_L_BFu7s_BFu9s()
{
  {
    init_simple_test("L_BFu7s_BFu9s");
    static STRUCT_IF_C L_BFu7s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, 1, "L_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 8, 7, 9, hide_ull(1LL<<8), "L_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu9s, L_BFu7s_BFu9s)
//============================================================================


struct  L_BFu7s_C  {
  __tsi64 v1;
  unsigned short v2:7;
  char v3;
};
//SIG(1 L_BFu7s_C) C1{ FL Fs:7 Fc}



static void Test_L_BFu7s_C()
{
  {
    init_simple_test("L_BFu7s_C");
    static STRUCT_IF_C L_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_C)");
    check_field_offset(lv, v1, 0, "L_BFu7s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_C");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_C");
    check_field_offset(lv, v3, 9, "L_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_C, L_BFu7s_C)
//============================================================================


struct  L_BFu7s_D  {
  __tsi64 v1;
  unsigned short v2:7;
  double v3;
};
//SIG(1 L_BFu7s_D) C1{ FL Fs:7 FL}



static void Test_L_BFu7s_D()
{
  {
    init_simple_test("L_BFu7s_D");
    static STRUCT_IF_C L_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_D)");
    check_field_offset(lv, v1, 0, "L_BFu7s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_D");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_D, L_BFu7s_D)
//============================================================================


struct  L_BFu7s_F  {
  __tsi64 v1;
  unsigned short v2:7;
  float v3;
};
//SIG(1 L_BFu7s_F) C1{ FL Fs:7 Fi}



static void Test_L_BFu7s_F()
{
  {
    init_simple_test("L_BFu7s_F");
    static STRUCT_IF_C L_BFu7s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_F)");
    check_field_offset(lv, v1, 0, "L_BFu7s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_F");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_F");
    check_field_offset(lv, v3, 12, "L_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_F, L_BFu7s_F)
//============================================================================


struct  L_BFu7s_I  {
  __tsi64 v1;
  unsigned short v2:7;
  int v3;
};
//SIG(1 L_BFu7s_I) C1{ FL Fs:7 Fi}



static void Test_L_BFu7s_I()
{
  {
    init_simple_test("L_BFu7s_I");
    static STRUCT_IF_C L_BFu7s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_I)");
    check_field_offset(lv, v1, 0, "L_BFu7s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_I");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_I");
    check_field_offset(lv, v3, 12, "L_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_I, L_BFu7s_I)
//============================================================================


struct  L_BFu7s_Ip  {
  __tsi64 v1;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 L_BFu7s_Ip) C1{ FL Fs:7 Fp}



static void Test_L_BFu7s_Ip()
{
  {
    init_simple_test("L_BFu7s_Ip");
    static STRUCT_IF_C L_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Ip");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Ip, L_BFu7s_Ip)
//============================================================================


struct  L_BFu7s_L  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 L_BFu7s_L) C1{ FL Fs:7 FL}



static void Test_L_BFu7s_L()
{
  {
    init_simple_test("L_BFu7s_L");
    static STRUCT_IF_C L_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_L)");
    check_field_offset(lv, v1, 0, "L_BFu7s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_L");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_L, L_BFu7s_L)
//============================================================================


struct  L_BFu7s_S  {
  __tsi64 v1;
  unsigned short v2:7;
  short v3;
};
//SIG(1 L_BFu7s_S) C1{ FL Fs:7 Fs}



static void Test_L_BFu7s_S()
{
  {
    init_simple_test("L_BFu7s_S");
    static STRUCT_IF_C L_BFu7s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_S)");
    check_field_offset(lv, v1, 0, "L_BFu7s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_S");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_S");
    check_field_offset(lv, v3, 10, "L_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_S, L_BFu7s_S)
//============================================================================


struct  L_BFu7s_Uc  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 L_BFu7s_Uc) C1{ FL Fs:7 Fc}



static void Test_L_BFu7s_Uc()
{
  {
    init_simple_test("L_BFu7s_Uc");
    static STRUCT_IF_C L_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Uc");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Uc");
    check_field_offset(lv, v3, 9, "L_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Uc, L_BFu7s_Uc)
//============================================================================


struct  L_BFu7s_Ui  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 L_BFu7s_Ui) C1{ FL Fs:7 Fi}



static void Test_L_BFu7s_Ui()
{
  {
    init_simple_test("L_BFu7s_Ui");
    static STRUCT_IF_C L_BFu7s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu7s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Ui");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Ui, L_BFu7s_Ui)
//============================================================================


struct  L_BFu7s_Ul  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 L_BFu7s_Ul) C1{ FL Fs:7 FL}



static void Test_L_BFu7s_Ul()
{
  {
    init_simple_test("L_BFu7s_Ul");
    static STRUCT_IF_C L_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Ul");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Ul, L_BFu7s_Ul)
//============================================================================


struct  L_BFu7s_Us  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 L_BFu7s_Us) C1{ FL Fs:7 Fs}



static void Test_L_BFu7s_Us()
{
  {
    init_simple_test("L_BFu7s_Us");
    static STRUCT_IF_C L_BFu7s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Us");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Us");
    check_field_offset(lv, v3, 10, "L_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Us, L_BFu7s_Us)
//============================================================================


struct  L_BFu7s_Vp  {
  __tsi64 v1;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 L_BFu7s_Vp) C1{ FL Fs:7 Fp}



static void Test_L_BFu7s_Vp()
{
  {
    init_simple_test("L_BFu7s_Vp");
    static STRUCT_IF_C L_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu7s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_Vp");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_Vp, L_BFu7s_Vp)
//============================================================================


struct  L_BFu8c  {
  __tsi64 v1;
  unsigned char v2:8;
};
//SIG(1 L_BFu8c) C1{ FL Fc:8}



static void Test_L_BFu8c()
{
  {
    init_simple_test("L_BFu8c");
    static STRUCT_IF_C L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c, L_BFu8c)
//============================================================================


struct  L_BFu8c_BFu15i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 L_BFu8c_BFu15i) C1{ FL Fc:8 Fi:15}



static void Test_L_BFu8c_BFu15i()
{
  {
    init_simple_test("L_BFu8c_BFu15i");
    static STRUCT_IF_C L_BFu8c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu15i, L_BFu8c_BFu15i)
//============================================================================


struct  L_BFu8c_BFu15ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 L_BFu8c_BFu15ll) C1{ FL Fc:8 FL:15}



static void Test_L_BFu8c_BFu15ll()
{
  {
    init_simple_test("L_BFu8c_BFu15ll");
    static STRUCT_IF_C L_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu15ll, L_BFu8c_BFu15ll)
//============================================================================


struct  L_BFu8c_BFu15s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 L_BFu8c_BFu15s) C1{ FL Fc:8 Fs:15}



static void Test_L_BFu8c_BFu15s()
{
  {
    init_simple_test("L_BFu8c_BFu15s");
    static STRUCT_IF_C L_BFu8c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu15s, L_BFu8c_BFu15s)
//============================================================================


struct  L_BFu8c_BFu16i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 L_BFu8c_BFu16i) C1{ FL Fc:8 Fi:16}



static void Test_L_BFu8c_BFu16i()
{
  {
    init_simple_test("L_BFu8c_BFu16i");
    static STRUCT_IF_C L_BFu8c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu16i, L_BFu8c_BFu16i)
//============================================================================


struct  L_BFu8c_BFu16ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 L_BFu8c_BFu16ll) C1{ FL Fc:8 FL:16}



static void Test_L_BFu8c_BFu16ll()
{
  {
    init_simple_test("L_BFu8c_BFu16ll");
    static STRUCT_IF_C L_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu16ll, L_BFu8c_BFu16ll)
//============================================================================


struct  L_BFu8c_BFu16s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 L_BFu8c_BFu16s) C1{ FL Fc:8 Fs:16}



static void Test_L_BFu8c_BFu16s()
{
  {
    init_simple_test("L_BFu8c_BFu16s");
    static STRUCT_IF_C L_BFu8c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu16s, L_BFu8c_BFu16s)
//============================================================================


struct  L_BFu8c_BFu17i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 L_BFu8c_BFu17i) C1{ FL Fc:8 Fi:17}



static void Test_L_BFu8c_BFu17i()
{
  {
    init_simple_test("L_BFu8c_BFu17i");
    static STRUCT_IF_C L_BFu8c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu17i, L_BFu8c_BFu17i)
//============================================================================


struct  L_BFu8c_BFu17ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 L_BFu8c_BFu17ll) C1{ FL Fc:8 FL:17}



static void Test_L_BFu8c_BFu17ll()
{
  {
    init_simple_test("L_BFu8c_BFu17ll");
    static STRUCT_IF_C L_BFu8c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu17ll, L_BFu8c_BFu17ll)
//============================================================================


struct  L_BFu8c_BFu1c  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 L_BFu8c_BFu1c) C1{ FL Fc:8 Fc:1}



static void Test_L_BFu8c_BFu1c()
{
  {
    init_simple_test("L_BFu8c_BFu1c");
    static STRUCT_IF_C L_BFu8c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu1c, L_BFu8c_BFu1c)
//============================================================================


struct  L_BFu8c_BFu1i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 L_BFu8c_BFu1i) C1{ FL Fc:8 Fi:1}



static void Test_L_BFu8c_BFu1i()
{
  {
    init_simple_test("L_BFu8c_BFu1i");
    static STRUCT_IF_C L_BFu8c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu1i, L_BFu8c_BFu1i)
//============================================================================


struct  L_BFu8c_BFu1ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 L_BFu8c_BFu1ll) C1{ FL Fc:8 FL:1}



static void Test_L_BFu8c_BFu1ll()
{
  {
    init_simple_test("L_BFu8c_BFu1ll");
    static STRUCT_IF_C L_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu1ll, L_BFu8c_BFu1ll)
//============================================================================


struct  L_BFu8c_BFu1s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 L_BFu8c_BFu1s) C1{ FL Fc:8 Fs:1}



static void Test_L_BFu8c_BFu1s()
{
  {
    init_simple_test("L_BFu8c_BFu1s");
    static STRUCT_IF_C L_BFu8c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu1s, L_BFu8c_BFu1s)
//============================================================================


struct  L_BFu8c_BFu31i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 L_BFu8c_BFu31i) C1{ FL Fc:8 Fi:31}



static void Test_L_BFu8c_BFu31i()
{
  {
    init_simple_test("L_BFu8c_BFu31i");
    static STRUCT_IF_C L_BFu8c_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu31i, L_BFu8c_BFu31i)
//============================================================================


struct  L_BFu8c_BFu31ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 L_BFu8c_BFu31ll) C1{ FL Fc:8 FL:31}



static void Test_L_BFu8c_BFu31ll()
{
  {
    init_simple_test("L_BFu8c_BFu31ll");
    static STRUCT_IF_C L_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu31ll, L_BFu8c_BFu31ll)
//============================================================================


struct  L_BFu8c_BFu32i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 L_BFu8c_BFu32i) C1{ FL Fc:8 Fi:32}



static void Test_L_BFu8c_BFu32i()
{
  {
    init_simple_test("L_BFu8c_BFu32i");
    static STRUCT_IF_C L_BFu8c_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu32i, L_BFu8c_BFu32i)
//============================================================================


struct  L_BFu8c_BFu32ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 L_BFu8c_BFu32ll) C1{ FL Fc:8 FL:32}



static void Test_L_BFu8c_BFu32ll()
{
  {
    init_simple_test("L_BFu8c_BFu32ll");
    static STRUCT_IF_C L_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu32ll, L_BFu8c_BFu32ll)
//============================================================================


struct  L_BFu8c_BFu33  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 L_BFu8c_BFu33) C1{ FL Fc:8 FL:33}



static void Test_L_BFu8c_BFu33()
{
  {
    init_simple_test("L_BFu8c_BFu33");
    static STRUCT_IF_C L_BFu8c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu33, L_BFu8c_BFu33)
//============================================================================


struct  L_BFu8c_BFu7c  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 L_BFu8c_BFu7c) C1{ FL Fc:8 Fc:7}



static void Test_L_BFu8c_BFu7c()
{
  {
    init_simple_test("L_BFu8c_BFu7c");
    static STRUCT_IF_C L_BFu8c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu7c, L_BFu8c_BFu7c)
//============================================================================


struct  L_BFu8c_BFu7i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 L_BFu8c_BFu7i) C1{ FL Fc:8 Fi:7}



static void Test_L_BFu8c_BFu7i()
{
  {
    init_simple_test("L_BFu8c_BFu7i");
    static STRUCT_IF_C L_BFu8c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu7i, L_BFu8c_BFu7i)
//============================================================================


struct  L_BFu8c_BFu7ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 L_BFu8c_BFu7ll) C1{ FL Fc:8 FL:7}



static void Test_L_BFu8c_BFu7ll()
{
  {
    init_simple_test("L_BFu8c_BFu7ll");
    static STRUCT_IF_C L_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu7ll, L_BFu8c_BFu7ll)
//============================================================================


struct  L_BFu8c_BFu7s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 L_BFu8c_BFu7s) C1{ FL Fc:8 Fs:7}



static void Test_L_BFu8c_BFu7s()
{
  {
    init_simple_test("L_BFu8c_BFu7s");
    static STRUCT_IF_C L_BFu8c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu7s, L_BFu8c_BFu7s)
//============================================================================


struct  L_BFu8c_BFu8c  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 L_BFu8c_BFu8c) C1{ FL Fc:8 Fc:8}



static void Test_L_BFu8c_BFu8c()
{
  {
    init_simple_test("L_BFu8c_BFu8c");
    static STRUCT_IF_C L_BFu8c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu8c, L_BFu8c_BFu8c)
//============================================================================


struct  L_BFu8c_BFu8i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 L_BFu8c_BFu8i) C1{ FL Fc:8 Fi:8}



static void Test_L_BFu8c_BFu8i()
{
  {
    init_simple_test("L_BFu8c_BFu8i");
    static STRUCT_IF_C L_BFu8c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu8i, L_BFu8c_BFu8i)
//============================================================================


struct  L_BFu8c_BFu8ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 L_BFu8c_BFu8ll) C1{ FL Fc:8 FL:8}



static void Test_L_BFu8c_BFu8ll()
{
  {
    init_simple_test("L_BFu8c_BFu8ll");
    static STRUCT_IF_C L_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu8ll, L_BFu8c_BFu8ll)
//============================================================================


struct  L_BFu8c_BFu8s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 L_BFu8c_BFu8s) C1{ FL Fc:8 Fs:8}



static void Test_L_BFu8c_BFu8s()
{
  {
    init_simple_test("L_BFu8c_BFu8s");
    static STRUCT_IF_C L_BFu8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu8s, L_BFu8c_BFu8s)
//============================================================================


struct  L_BFu8c_BFu9i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 L_BFu8c_BFu9i) C1{ FL Fc:8 Fi:9}



static void Test_L_BFu8c_BFu9i()
{
  {
    init_simple_test("L_BFu8c_BFu9i");
    static STRUCT_IF_C L_BFu8c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu9i, L_BFu8c_BFu9i)
//============================================================================


struct  L_BFu8c_BFu9ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 L_BFu8c_BFu9ll) C1{ FL Fc:8 FL:9}



static void Test_L_BFu8c_BFu9ll()
{
  {
    init_simple_test("L_BFu8c_BFu9ll");
    static STRUCT_IF_C L_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu9ll, L_BFu8c_BFu9ll)
//============================================================================


struct  L_BFu8c_BFu9s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 L_BFu8c_BFu9s) C1{ FL Fc:8 Fs:9}



static void Test_L_BFu8c_BFu9s()
{
  {
    init_simple_test("L_BFu8c_BFu9s");
    static STRUCT_IF_C L_BFu8c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_BFu9s, L_BFu8c_BFu9s)
//============================================================================


struct  L_BFu8c_C  {
  __tsi64 v1;
  unsigned char v2:8;
  char v3;
};
//SIG(1 L_BFu8c_C) C1{ FL Fc:8 Fc}



static void Test_L_BFu8c_C()
{
  {
    init_simple_test("L_BFu8c_C");
    static STRUCT_IF_C L_BFu8c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_C)");
    check_field_offset(lv, v1, 0, "L_BFu8c_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_C");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_C");
    check_field_offset(lv, v3, 9, "L_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_C, L_BFu8c_C)
//============================================================================


struct  L_BFu8c_D  {
  __tsi64 v1;
  unsigned char v2:8;
  double v3;
};
//SIG(1 L_BFu8c_D) C1{ FL Fc:8 FL}



static void Test_L_BFu8c_D()
{
  {
    init_simple_test("L_BFu8c_D");
    static STRUCT_IF_C L_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_D)");
    check_field_offset(lv, v1, 0, "L_BFu8c_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_D");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_D, L_BFu8c_D)
//============================================================================


struct  L_BFu8c_F  {
  __tsi64 v1;
  unsigned char v2:8;
  float v3;
};
//SIG(1 L_BFu8c_F) C1{ FL Fc:8 Fi}



static void Test_L_BFu8c_F()
{
  {
    init_simple_test("L_BFu8c_F");
    static STRUCT_IF_C L_BFu8c_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_F)");
    check_field_offset(lv, v1, 0, "L_BFu8c_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_F");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_F");
    check_field_offset(lv, v3, 12, "L_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_F, L_BFu8c_F)
//============================================================================


struct  L_BFu8c_I  {
  __tsi64 v1;
  unsigned char v2:8;
  int v3;
};
//SIG(1 L_BFu8c_I) C1{ FL Fc:8 Fi}



static void Test_L_BFu8c_I()
{
  {
    init_simple_test("L_BFu8c_I");
    static STRUCT_IF_C L_BFu8c_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_I)");
    check_field_offset(lv, v1, 0, "L_BFu8c_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_I");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_I");
    check_field_offset(lv, v3, 12, "L_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_I, L_BFu8c_I)
//============================================================================


struct  L_BFu8c_Ip  {
  __tsi64 v1;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 L_BFu8c_Ip) C1{ FL Fc:8 Fp}



static void Test_L_BFu8c_Ip()
{
  {
    init_simple_test("L_BFu8c_Ip");
    static STRUCT_IF_C L_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Ip");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Ip, L_BFu8c_Ip)
//============================================================================


struct  L_BFu8c_L  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 L_BFu8c_L) C1{ FL Fc:8 FL}



static void Test_L_BFu8c_L()
{
  {
    init_simple_test("L_BFu8c_L");
    static STRUCT_IF_C L_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_L)");
    check_field_offset(lv, v1, 0, "L_BFu8c_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_L");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_L, L_BFu8c_L)
//============================================================================


struct  L_BFu8c_S  {
  __tsi64 v1;
  unsigned char v2:8;
  short v3;
};
//SIG(1 L_BFu8c_S) C1{ FL Fc:8 Fs}



static void Test_L_BFu8c_S()
{
  {
    init_simple_test("L_BFu8c_S");
    static STRUCT_IF_C L_BFu8c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_S)");
    check_field_offset(lv, v1, 0, "L_BFu8c_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_S");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_S");
    check_field_offset(lv, v3, 10, "L_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_S, L_BFu8c_S)
//============================================================================


struct  L_BFu8c_Uc  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 L_BFu8c_Uc) C1{ FL Fc:8 Fc}



static void Test_L_BFu8c_Uc()
{
  {
    init_simple_test("L_BFu8c_Uc");
    static STRUCT_IF_C L_BFu8c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Uc");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Uc");
    check_field_offset(lv, v3, 9, "L_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Uc, L_BFu8c_Uc)
//============================================================================


struct  L_BFu8c_Ui  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 L_BFu8c_Ui) C1{ FL Fc:8 Fi}



static void Test_L_BFu8c_Ui()
{
  {
    init_simple_test("L_BFu8c_Ui");
    static STRUCT_IF_C L_BFu8c_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Ui");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Ui");
    check_field_offset(lv, v3, 12, "L_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Ui, L_BFu8c_Ui)
//============================================================================


struct  L_BFu8c_Ul  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 L_BFu8c_Ul) C1{ FL Fc:8 FL}



static void Test_L_BFu8c_Ul()
{
  {
    init_simple_test("L_BFu8c_Ul");
    static STRUCT_IF_C L_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Ul");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Ul, L_BFu8c_Ul)
//============================================================================


struct  L_BFu8c_Us  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 L_BFu8c_Us) C1{ FL Fc:8 Fs}



static void Test_L_BFu8c_Us()
{
  {
    init_simple_test("L_BFu8c_Us");
    static STRUCT_IF_C L_BFu8c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Us)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Us");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Us");
    check_field_offset(lv, v3, 10, "L_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Us, L_BFu8c_Us)
//============================================================================


struct  L_BFu8c_Vp  {
  __tsi64 v1;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 L_BFu8c_Vp) C1{ FL Fc:8 Fp}



static void Test_L_BFu8c_Vp()
{
  {
    init_simple_test("L_BFu8c_Vp");
    static STRUCT_IF_C L_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu8c_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_Vp");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8c_Vp, L_BFu8c_Vp)
//============================================================================


struct  L_BFu8i  {
  __tsi64 v1;
  unsigned int v2:8;
};
//SIG(1 L_BFu8i) C1{ FL Fi:8}



static void Test_L_BFu8i()
{
  {
    init_simple_test("L_BFu8i");
    static STRUCT_IF_C L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i, L_BFu8i)
//============================================================================


struct  L_BFu8i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 L_BFu8i_BFu15i) C1{ FL Fi:8 Fi:15}



static void Test_L_BFu8i_BFu15i()
{
  {
    init_simple_test("L_BFu8i_BFu15i");
    static STRUCT_IF_C L_BFu8i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu15i, L_BFu8i_BFu15i)
//============================================================================


struct  L_BFu8i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 L_BFu8i_BFu15ll) C1{ FL Fi:8 FL:15}



static void Test_L_BFu8i_BFu15ll()
{
  {
    init_simple_test("L_BFu8i_BFu15ll");
    static STRUCT_IF_C L_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu15ll, L_BFu8i_BFu15ll)
//============================================================================


struct  L_BFu8i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 L_BFu8i_BFu15s) C1{ FL Fi:8 Fs:15}



static void Test_L_BFu8i_BFu15s()
{
  {
    init_simple_test("L_BFu8i_BFu15s");
    static STRUCT_IF_C L_BFu8i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu15s, L_BFu8i_BFu15s)
//============================================================================


struct  L_BFu8i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 L_BFu8i_BFu16i) C1{ FL Fi:8 Fi:16}



static void Test_L_BFu8i_BFu16i()
{
  {
    init_simple_test("L_BFu8i_BFu16i");
    static STRUCT_IF_C L_BFu8i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu16i, L_BFu8i_BFu16i)
//============================================================================


struct  L_BFu8i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 L_BFu8i_BFu16ll) C1{ FL Fi:8 FL:16}



static void Test_L_BFu8i_BFu16ll()
{
  {
    init_simple_test("L_BFu8i_BFu16ll");
    static STRUCT_IF_C L_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu16ll, L_BFu8i_BFu16ll)
//============================================================================


struct  L_BFu8i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 L_BFu8i_BFu16s) C1{ FL Fi:8 Fs:16}



static void Test_L_BFu8i_BFu16s()
{
  {
    init_simple_test("L_BFu8i_BFu16s");
    static STRUCT_IF_C L_BFu8i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu16s, L_BFu8i_BFu16s)
//============================================================================


struct  L_BFu8i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 L_BFu8i_BFu17i) C1{ FL Fi:8 Fi:17}



static void Test_L_BFu8i_BFu17i()
{
  {
    init_simple_test("L_BFu8i_BFu17i");
    static STRUCT_IF_C L_BFu8i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu17i, L_BFu8i_BFu17i)
//============================================================================


struct  L_BFu8i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 L_BFu8i_BFu17ll) C1{ FL Fi:8 FL:17}



static void Test_L_BFu8i_BFu17ll()
{
  {
    init_simple_test("L_BFu8i_BFu17ll");
    static STRUCT_IF_C L_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu17ll, L_BFu8i_BFu17ll)
//============================================================================


struct  L_BFu8i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 L_BFu8i_BFu1c) C1{ FL Fi:8 Fc:1}



static void Test_L_BFu8i_BFu1c()
{
  {
    init_simple_test("L_BFu8i_BFu1c");
    static STRUCT_IF_C L_BFu8i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu1c, L_BFu8i_BFu1c)
//============================================================================


struct  L_BFu8i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 L_BFu8i_BFu1i) C1{ FL Fi:8 Fi:1}



static void Test_L_BFu8i_BFu1i()
{
  {
    init_simple_test("L_BFu8i_BFu1i");
    static STRUCT_IF_C L_BFu8i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu1i, L_BFu8i_BFu1i)
//============================================================================


struct  L_BFu8i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 L_BFu8i_BFu1ll) C1{ FL Fi:8 FL:1}



static void Test_L_BFu8i_BFu1ll()
{
  {
    init_simple_test("L_BFu8i_BFu1ll");
    static STRUCT_IF_C L_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu1ll, L_BFu8i_BFu1ll)
//============================================================================


struct  L_BFu8i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 L_BFu8i_BFu1s) C1{ FL Fi:8 Fs:1}



static void Test_L_BFu8i_BFu1s()
{
  {
    init_simple_test("L_BFu8i_BFu1s");
    static STRUCT_IF_C L_BFu8i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu1s, L_BFu8i_BFu1s)
//============================================================================


struct  L_BFu8i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 L_BFu8i_BFu31i) C1{ FL Fi:8 Fi:31}



static void Test_L_BFu8i_BFu31i()
{
  {
    init_simple_test("L_BFu8i_BFu31i");
    static STRUCT_IF_C L_BFu8i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu31i, L_BFu8i_BFu31i)
//============================================================================


struct  L_BFu8i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 L_BFu8i_BFu31ll) C1{ FL Fi:8 FL:31}



static void Test_L_BFu8i_BFu31ll()
{
  {
    init_simple_test("L_BFu8i_BFu31ll");
    static STRUCT_IF_C L_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu31ll, L_BFu8i_BFu31ll)
//============================================================================


struct  L_BFu8i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 L_BFu8i_BFu32i) C1{ FL Fi:8 Fi:32}



static void Test_L_BFu8i_BFu32i()
{
  {
    init_simple_test("L_BFu8i_BFu32i");
    static STRUCT_IF_C L_BFu8i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu32i, L_BFu8i_BFu32i)
//============================================================================


struct  L_BFu8i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 L_BFu8i_BFu32ll) C1{ FL Fi:8 FL:32}



static void Test_L_BFu8i_BFu32ll()
{
  {
    init_simple_test("L_BFu8i_BFu32ll");
    static STRUCT_IF_C L_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu32ll, L_BFu8i_BFu32ll)
//============================================================================


struct  L_BFu8i_BFu33  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 L_BFu8i_BFu33) C1{ FL Fi:8 FL:33}



static void Test_L_BFu8i_BFu33()
{
  {
    init_simple_test("L_BFu8i_BFu33");
    static STRUCT_IF_C L_BFu8i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu33, L_BFu8i_BFu33)
//============================================================================


struct  L_BFu8i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 L_BFu8i_BFu7c) C1{ FL Fi:8 Fc:7}



static void Test_L_BFu8i_BFu7c()
{
  {
    init_simple_test("L_BFu8i_BFu7c");
    static STRUCT_IF_C L_BFu8i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu7c, L_BFu8i_BFu7c)
//============================================================================


struct  L_BFu8i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 L_BFu8i_BFu7i) C1{ FL Fi:8 Fi:7}



static void Test_L_BFu8i_BFu7i()
{
  {
    init_simple_test("L_BFu8i_BFu7i");
    static STRUCT_IF_C L_BFu8i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu7i, L_BFu8i_BFu7i)
//============================================================================


struct  L_BFu8i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 L_BFu8i_BFu7ll) C1{ FL Fi:8 FL:7}



static void Test_L_BFu8i_BFu7ll()
{
  {
    init_simple_test("L_BFu8i_BFu7ll");
    static STRUCT_IF_C L_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu7ll, L_BFu8i_BFu7ll)
//============================================================================


struct  L_BFu8i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 L_BFu8i_BFu7s) C1{ FL Fi:8 Fs:7}



static void Test_L_BFu8i_BFu7s()
{
  {
    init_simple_test("L_BFu8i_BFu7s");
    static STRUCT_IF_C L_BFu8i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu7s, L_BFu8i_BFu7s)
//============================================================================


struct  L_BFu8i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 L_BFu8i_BFu8c) C1{ FL Fi:8 Fc:8}



static void Test_L_BFu8i_BFu8c()
{
  {
    init_simple_test("L_BFu8i_BFu8c");
    static STRUCT_IF_C L_BFu8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu8c, L_BFu8i_BFu8c)
//============================================================================


struct  L_BFu8i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 L_BFu8i_BFu8i) C1{ FL Fi:8 Fi:8}



static void Test_L_BFu8i_BFu8i()
{
  {
    init_simple_test("L_BFu8i_BFu8i");
    static STRUCT_IF_C L_BFu8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu8i, L_BFu8i_BFu8i)
//============================================================================


struct  L_BFu8i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 L_BFu8i_BFu8ll) C1{ FL Fi:8 FL:8}



static void Test_L_BFu8i_BFu8ll()
{
  {
    init_simple_test("L_BFu8i_BFu8ll");
    static STRUCT_IF_C L_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu8ll, L_BFu8i_BFu8ll)
//============================================================================


struct  L_BFu8i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 L_BFu8i_BFu8s) C1{ FL Fi:8 Fs:8}



static void Test_L_BFu8i_BFu8s()
{
  {
    init_simple_test("L_BFu8i_BFu8s");
    static STRUCT_IF_C L_BFu8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu8s, L_BFu8i_BFu8s)
//============================================================================


struct  L_BFu8i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 L_BFu8i_BFu9i) C1{ FL Fi:8 Fi:9}



static void Test_L_BFu8i_BFu9i()
{
  {
    init_simple_test("L_BFu8i_BFu9i");
    static STRUCT_IF_C L_BFu8i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu9i, L_BFu8i_BFu9i)
//============================================================================


struct  L_BFu8i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 L_BFu8i_BFu9ll) C1{ FL Fi:8 FL:9}



static void Test_L_BFu8i_BFu9ll()
{
  {
    init_simple_test("L_BFu8i_BFu9ll");
    static STRUCT_IF_C L_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu9ll, L_BFu8i_BFu9ll)
//============================================================================


struct  L_BFu8i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 L_BFu8i_BFu9s) C1{ FL Fi:8 Fs:9}



static void Test_L_BFu8i_BFu9s()
{
  {
    init_simple_test("L_BFu8i_BFu9s");
    static STRUCT_IF_C L_BFu8i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_BFu9s, L_BFu8i_BFu9s)
//============================================================================


struct  L_BFu8i_C  {
  __tsi64 v1;
  unsigned int v2:8;
  char v3;
};
//SIG(1 L_BFu8i_C) C1{ FL Fi:8 Fc}



static void Test_L_BFu8i_C()
{
  {
    init_simple_test("L_BFu8i_C");
    static STRUCT_IF_C L_BFu8i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_C)");
    check_field_offset(lv, v1, 0, "L_BFu8i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_C");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_C");
    check_field_offset(lv, v3, 9, "L_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_C, L_BFu8i_C)
//============================================================================


struct  L_BFu8i_D  {
  __tsi64 v1;
  unsigned int v2:8;
  double v3;
};
//SIG(1 L_BFu8i_D) C1{ FL Fi:8 FL}



static void Test_L_BFu8i_D()
{
  {
    init_simple_test("L_BFu8i_D");
    static STRUCT_IF_C L_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_D)");
    check_field_offset(lv, v1, 0, "L_BFu8i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_D");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_D, L_BFu8i_D)
//============================================================================


struct  L_BFu8i_F  {
  __tsi64 v1;
  unsigned int v2:8;
  float v3;
};
//SIG(1 L_BFu8i_F) C1{ FL Fi:8 Fi}



static void Test_L_BFu8i_F()
{
  {
    init_simple_test("L_BFu8i_F");
    static STRUCT_IF_C L_BFu8i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_F)");
    check_field_offset(lv, v1, 0, "L_BFu8i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_F");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_F");
    check_field_offset(lv, v3, 12, "L_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_F, L_BFu8i_F)
//============================================================================


struct  L_BFu8i_I  {
  __tsi64 v1;
  unsigned int v2:8;
  int v3;
};
//SIG(1 L_BFu8i_I) C1{ FL Fi:8 Fi}



static void Test_L_BFu8i_I()
{
  {
    init_simple_test("L_BFu8i_I");
    static STRUCT_IF_C L_BFu8i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_I)");
    check_field_offset(lv, v1, 0, "L_BFu8i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_I");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_I");
    check_field_offset(lv, v3, 12, "L_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_I, L_BFu8i_I)
//============================================================================


struct  L_BFu8i_Ip  {
  __tsi64 v1;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 L_BFu8i_Ip) C1{ FL Fi:8 Fp}



static void Test_L_BFu8i_Ip()
{
  {
    init_simple_test("L_BFu8i_Ip");
    static STRUCT_IF_C L_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Ip, L_BFu8i_Ip)
//============================================================================


struct  L_BFu8i_L  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 L_BFu8i_L) C1{ FL Fi:8 FL}



static void Test_L_BFu8i_L()
{
  {
    init_simple_test("L_BFu8i_L");
    static STRUCT_IF_C L_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_L)");
    check_field_offset(lv, v1, 0, "L_BFu8i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_L");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_L, L_BFu8i_L)
//============================================================================


struct  L_BFu8i_S  {
  __tsi64 v1;
  unsigned int v2:8;
  short v3;
};
//SIG(1 L_BFu8i_S) C1{ FL Fi:8 Fs}



static void Test_L_BFu8i_S()
{
  {
    init_simple_test("L_BFu8i_S");
    static STRUCT_IF_C L_BFu8i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_S)");
    check_field_offset(lv, v1, 0, "L_BFu8i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_S");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_S");
    check_field_offset(lv, v3, 10, "L_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_S, L_BFu8i_S)
//============================================================================


struct  L_BFu8i_Uc  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 L_BFu8i_Uc) C1{ FL Fi:8 Fc}



static void Test_L_BFu8i_Uc()
{
  {
    init_simple_test("L_BFu8i_Uc");
    static STRUCT_IF_C L_BFu8i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Uc");
    check_field_offset(lv, v3, 9, "L_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Uc, L_BFu8i_Uc)
//============================================================================


struct  L_BFu8i_Ui  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 L_BFu8i_Ui) C1{ FL Fi:8 Fi}



static void Test_L_BFu8i_Ui()
{
  {
    init_simple_test("L_BFu8i_Ui");
    static STRUCT_IF_C L_BFu8i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Ui, L_BFu8i_Ui)
//============================================================================


struct  L_BFu8i_Ul  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 L_BFu8i_Ul) C1{ FL Fi:8 FL}



static void Test_L_BFu8i_Ul()
{
  {
    init_simple_test("L_BFu8i_Ul");
    static STRUCT_IF_C L_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Ul, L_BFu8i_Ul)
//============================================================================


struct  L_BFu8i_Us  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 L_BFu8i_Us) C1{ FL Fi:8 Fs}



static void Test_L_BFu8i_Us()
{
  {
    init_simple_test("L_BFu8i_Us");
    static STRUCT_IF_C L_BFu8i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Us");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Us");
    check_field_offset(lv, v3, 10, "L_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Us, L_BFu8i_Us)
//============================================================================


struct  L_BFu8i_Vp  {
  __tsi64 v1;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 L_BFu8i_Vp) C1{ FL Fi:8 Fp}



static void Test_L_BFu8i_Vp()
{
  {
    init_simple_test("L_BFu8i_Vp");
    static STRUCT_IF_C L_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu8i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8i_Vp, L_BFu8i_Vp)
//============================================================================


struct  L_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:8;
};
//SIG(1 L_BFu8ll) C1{ FL FL:8}



static void Test_L_BFu8ll()
{
  {
    init_simple_test("L_BFu8ll");
    static STRUCT_IF_C L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll, L_BFu8ll)
//============================================================================


struct  L_BFu8ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 L_BFu8ll_BFu15i) C1{ FL FL:8 Fi:15}



static void Test_L_BFu8ll_BFu15i()
{
  {
    init_simple_test("L_BFu8ll_BFu15i");
    static STRUCT_IF_C L_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu15i, L_BFu8ll_BFu15i)
//============================================================================


struct  L_BFu8ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 L_BFu8ll_BFu15ll) C1{ FL FL:8 FL:15}



static void Test_L_BFu8ll_BFu15ll()
{
  {
    init_simple_test("L_BFu8ll_BFu15ll");
    static STRUCT_IF_C L_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu15ll, L_BFu8ll_BFu15ll)
//============================================================================


struct  L_BFu8ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 L_BFu8ll_BFu15s) C1{ FL FL:8 Fs:15}



static void Test_L_BFu8ll_BFu15s()
{
  {
    init_simple_test("L_BFu8ll_BFu15s");
    static STRUCT_IF_C L_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu15s, L_BFu8ll_BFu15s)
//============================================================================


struct  L_BFu8ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 L_BFu8ll_BFu16i) C1{ FL FL:8 Fi:16}



static void Test_L_BFu8ll_BFu16i()
{
  {
    init_simple_test("L_BFu8ll_BFu16i");
    static STRUCT_IF_C L_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu16i, L_BFu8ll_BFu16i)
//============================================================================


struct  L_BFu8ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 L_BFu8ll_BFu16ll) C1{ FL FL:8 FL:16}



static void Test_L_BFu8ll_BFu16ll()
{
  {
    init_simple_test("L_BFu8ll_BFu16ll");
    static STRUCT_IF_C L_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu16ll, L_BFu8ll_BFu16ll)
//============================================================================


struct  L_BFu8ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 L_BFu8ll_BFu16s) C1{ FL FL:8 Fs:16}



static void Test_L_BFu8ll_BFu16s()
{
  {
    init_simple_test("L_BFu8ll_BFu16s");
    static STRUCT_IF_C L_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu16s, L_BFu8ll_BFu16s)
//============================================================================


struct  L_BFu8ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 L_BFu8ll_BFu17i) C1{ FL FL:8 Fi:17}



static void Test_L_BFu8ll_BFu17i()
{
  {
    init_simple_test("L_BFu8ll_BFu17i");
    static STRUCT_IF_C L_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu17i, L_BFu8ll_BFu17i)
//============================================================================


struct  L_BFu8ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 L_BFu8ll_BFu17ll) C1{ FL FL:8 FL:17}



static void Test_L_BFu8ll_BFu17ll()
{
  {
    init_simple_test("L_BFu8ll_BFu17ll");
    static STRUCT_IF_C L_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu17ll, L_BFu8ll_BFu17ll)
//============================================================================


struct  L_BFu8ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 L_BFu8ll_BFu1c) C1{ FL FL:8 Fc:1}



static void Test_L_BFu8ll_BFu1c()
{
  {
    init_simple_test("L_BFu8ll_BFu1c");
    static STRUCT_IF_C L_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu1c, L_BFu8ll_BFu1c)
//============================================================================


struct  L_BFu8ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 L_BFu8ll_BFu1i) C1{ FL FL:8 Fi:1}



static void Test_L_BFu8ll_BFu1i()
{
  {
    init_simple_test("L_BFu8ll_BFu1i");
    static STRUCT_IF_C L_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu1i, L_BFu8ll_BFu1i)
//============================================================================


struct  L_BFu8ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 L_BFu8ll_BFu1ll) C1{ FL FL:8 FL:1}



static void Test_L_BFu8ll_BFu1ll()
{
  {
    init_simple_test("L_BFu8ll_BFu1ll");
    static STRUCT_IF_C L_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu1ll, L_BFu8ll_BFu1ll)
//============================================================================


struct  L_BFu8ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 L_BFu8ll_BFu1s) C1{ FL FL:8 Fs:1}



static void Test_L_BFu8ll_BFu1s()
{
  {
    init_simple_test("L_BFu8ll_BFu1s");
    static STRUCT_IF_C L_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu1s, L_BFu8ll_BFu1s)
//============================================================================


struct  L_BFu8ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 L_BFu8ll_BFu31i) C1{ FL FL:8 Fi:31}



static void Test_L_BFu8ll_BFu31i()
{
  {
    init_simple_test("L_BFu8ll_BFu31i");
    static STRUCT_IF_C L_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu31i, L_BFu8ll_BFu31i)
//============================================================================


struct  L_BFu8ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 L_BFu8ll_BFu31ll) C1{ FL FL:8 FL:31}



static void Test_L_BFu8ll_BFu31ll()
{
  {
    init_simple_test("L_BFu8ll_BFu31ll");
    static STRUCT_IF_C L_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu31ll, L_BFu8ll_BFu31ll)
//============================================================================


struct  L_BFu8ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 L_BFu8ll_BFu32i) C1{ FL FL:8 Fi:32}



static void Test_L_BFu8ll_BFu32i()
{
  {
    init_simple_test("L_BFu8ll_BFu32i");
    static STRUCT_IF_C L_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu32i, L_BFu8ll_BFu32i)
//============================================================================


struct  L_BFu8ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 L_BFu8ll_BFu32ll) C1{ FL FL:8 FL:32}



static void Test_L_BFu8ll_BFu32ll()
{
  {
    init_simple_test("L_BFu8ll_BFu32ll");
    static STRUCT_IF_C L_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu32ll, L_BFu8ll_BFu32ll)
//============================================================================


struct  L_BFu8ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 L_BFu8ll_BFu33) C1{ FL FL:8 FL:33}



static void Test_L_BFu8ll_BFu33()
{
  {
    init_simple_test("L_BFu8ll_BFu33");
    static STRUCT_IF_C L_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu33, L_BFu8ll_BFu33)
//============================================================================


struct  L_BFu8ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 L_BFu8ll_BFu7c) C1{ FL FL:8 Fc:7}



static void Test_L_BFu8ll_BFu7c()
{
  {
    init_simple_test("L_BFu8ll_BFu7c");
    static STRUCT_IF_C L_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu7c, L_BFu8ll_BFu7c)
//============================================================================


struct  L_BFu8ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 L_BFu8ll_BFu7i) C1{ FL FL:8 Fi:7}



static void Test_L_BFu8ll_BFu7i()
{
  {
    init_simple_test("L_BFu8ll_BFu7i");
    static STRUCT_IF_C L_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu7i, L_BFu8ll_BFu7i)
//============================================================================


struct  L_BFu8ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 L_BFu8ll_BFu7ll) C1{ FL FL:8 FL:7}



static void Test_L_BFu8ll_BFu7ll()
{
  {
    init_simple_test("L_BFu8ll_BFu7ll");
    static STRUCT_IF_C L_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu7ll, L_BFu8ll_BFu7ll)
//============================================================================


struct  L_BFu8ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 L_BFu8ll_BFu7s) C1{ FL FL:8 Fs:7}



static void Test_L_BFu8ll_BFu7s()
{
  {
    init_simple_test("L_BFu8ll_BFu7s");
    static STRUCT_IF_C L_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu7s, L_BFu8ll_BFu7s)
//============================================================================


struct  L_BFu8ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 L_BFu8ll_BFu8c) C1{ FL FL:8 Fc:8}



static void Test_L_BFu8ll_BFu8c()
{
  {
    init_simple_test("L_BFu8ll_BFu8c");
    static STRUCT_IF_C L_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu8c, L_BFu8ll_BFu8c)
//============================================================================


struct  L_BFu8ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 L_BFu8ll_BFu8i) C1{ FL FL:8 Fi:8}



static void Test_L_BFu8ll_BFu8i()
{
  {
    init_simple_test("L_BFu8ll_BFu8i");
    static STRUCT_IF_C L_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu8i, L_BFu8ll_BFu8i)
//============================================================================


struct  L_BFu8ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 L_BFu8ll_BFu8ll) C1{ FL FL:8 FL:8}



static void Test_L_BFu8ll_BFu8ll()
{
  {
    init_simple_test("L_BFu8ll_BFu8ll");
    static STRUCT_IF_C L_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu8ll, L_BFu8ll_BFu8ll)
//============================================================================


struct  L_BFu8ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 L_BFu8ll_BFu8s) C1{ FL FL:8 Fs:8}



static void Test_L_BFu8ll_BFu8s()
{
  {
    init_simple_test("L_BFu8ll_BFu8s");
    static STRUCT_IF_C L_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu8s, L_BFu8ll_BFu8s)
//============================================================================


struct  L_BFu8ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 L_BFu8ll_BFu9i) C1{ FL FL:8 Fi:9}



static void Test_L_BFu8ll_BFu9i()
{
  {
    init_simple_test("L_BFu8ll_BFu9i");
    static STRUCT_IF_C L_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu9i, L_BFu8ll_BFu9i)
//============================================================================


struct  L_BFu8ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 L_BFu8ll_BFu9ll) C1{ FL FL:8 FL:9}



static void Test_L_BFu8ll_BFu9ll()
{
  {
    init_simple_test("L_BFu8ll_BFu9ll");
    static STRUCT_IF_C L_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu9ll, L_BFu8ll_BFu9ll)
//============================================================================


struct  L_BFu8ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 L_BFu8ll_BFu9s) C1{ FL FL:8 Fs:9}



static void Test_L_BFu8ll_BFu9s()
{
  {
    init_simple_test("L_BFu8ll_BFu9s");
    static STRUCT_IF_C L_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_BFu9s, L_BFu8ll_BFu9s)
//============================================================================


struct  L_BFu8ll_C  {
  __tsi64 v1;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 L_BFu8ll_C) C1{ FL FL:8 Fc}



static void Test_L_BFu8ll_C()
{
  {
    init_simple_test("L_BFu8ll_C");
    static STRUCT_IF_C L_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_C");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_C");
    check_field_offset(lv, v3, 9, "L_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_C, L_BFu8ll_C)
//============================================================================


struct  L_BFu8ll_D  {
  __tsi64 v1;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 L_BFu8ll_D) C1{ FL FL:8 FL}



static void Test_L_BFu8ll_D()
{
  {
    init_simple_test("L_BFu8ll_D");
    static STRUCT_IF_C L_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_D");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_D, L_BFu8ll_D)
//============================================================================


struct  L_BFu8ll_F  {
  __tsi64 v1;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 L_BFu8ll_F) C1{ FL FL:8 Fi}



static void Test_L_BFu8ll_F()
{
  {
    init_simple_test("L_BFu8ll_F");
    static STRUCT_IF_C L_BFu8ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_F");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_F");
    check_field_offset(lv, v3, 12, "L_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_F, L_BFu8ll_F)
//============================================================================


struct  L_BFu8ll_I  {
  __tsi64 v1;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 L_BFu8ll_I) C1{ FL FL:8 Fi}



static void Test_L_BFu8ll_I()
{
  {
    init_simple_test("L_BFu8ll_I");
    static STRUCT_IF_C L_BFu8ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_I");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_I");
    check_field_offset(lv, v3, 12, "L_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_I, L_BFu8ll_I)
//============================================================================


struct  L_BFu8ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 L_BFu8ll_Ip) C1{ FL FL:8 Fp}



static void Test_L_BFu8ll_Ip()
{
  {
    init_simple_test("L_BFu8ll_Ip");
    static STRUCT_IF_C L_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Ip, L_BFu8ll_Ip)
//============================================================================


struct  L_BFu8ll_L  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 L_BFu8ll_L) C1{ FL FL:8 FL}



static void Test_L_BFu8ll_L()
{
  {
    init_simple_test("L_BFu8ll_L");
    static STRUCT_IF_C L_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_L");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_L, L_BFu8ll_L)
//============================================================================


struct  L_BFu8ll_S  {
  __tsi64 v1;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 L_BFu8ll_S) C1{ FL FL:8 Fs}



static void Test_L_BFu8ll_S()
{
  {
    init_simple_test("L_BFu8ll_S");
    static STRUCT_IF_C L_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_S");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_S");
    check_field_offset(lv, v3, 10, "L_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_S, L_BFu8ll_S)
//============================================================================


struct  L_BFu8ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 L_BFu8ll_Uc) C1{ FL FL:8 Fc}



static void Test_L_BFu8ll_Uc()
{
  {
    init_simple_test("L_BFu8ll_Uc");
    static STRUCT_IF_C L_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Uc");
    check_field_offset(lv, v3, 9, "L_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Uc, L_BFu8ll_Uc)
//============================================================================


struct  L_BFu8ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 L_BFu8ll_Ui) C1{ FL FL:8 Fi}



static void Test_L_BFu8ll_Ui()
{
  {
    init_simple_test("L_BFu8ll_Ui");
    static STRUCT_IF_C L_BFu8ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Ui, L_BFu8ll_Ui)
//============================================================================


struct  L_BFu8ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 L_BFu8ll_Ul) C1{ FL FL:8 FL}



static void Test_L_BFu8ll_Ul()
{
  {
    init_simple_test("L_BFu8ll_Ul");
    static STRUCT_IF_C L_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Ul, L_BFu8ll_Ul)
//============================================================================


struct  L_BFu8ll_Us  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 L_BFu8ll_Us) C1{ FL FL:8 Fs}



static void Test_L_BFu8ll_Us()
{
  {
    init_simple_test("L_BFu8ll_Us");
    static STRUCT_IF_C L_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Us, L_BFu8ll_Us)
//============================================================================


struct  L_BFu8ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 L_BFu8ll_Vp) C1{ FL FL:8 Fp}



static void Test_L_BFu8ll_Vp()
{
  {
    init_simple_test("L_BFu8ll_Vp");
    static STRUCT_IF_C L_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8ll_Vp, L_BFu8ll_Vp)
//============================================================================


struct  L_BFu8s  {
  __tsi64 v1;
  unsigned short v2:8;
};
//SIG(1 L_BFu8s) C1{ FL Fs:8}



static void Test_L_BFu8s()
{
  {
    init_simple_test("L_BFu8s");
    static STRUCT_IF_C L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s, L_BFu8s)
//============================================================================


struct  L_BFu8s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 L_BFu8s_BFu15i) C1{ FL Fs:8 Fi:15}



static void Test_L_BFu8s_BFu15i()
{
  {
    init_simple_test("L_BFu8s_BFu15i");
    static STRUCT_IF_C L_BFu8s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu15i, L_BFu8s_BFu15i)
//============================================================================


struct  L_BFu8s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 L_BFu8s_BFu15ll) C1{ FL Fs:8 FL:15}



static void Test_L_BFu8s_BFu15ll()
{
  {
    init_simple_test("L_BFu8s_BFu15ll");
    static STRUCT_IF_C L_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu15ll, L_BFu8s_BFu15ll)
//============================================================================


struct  L_BFu8s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 L_BFu8s_BFu15s) C1{ FL Fs:8 Fs:15}



static void Test_L_BFu8s_BFu15s()
{
  {
    init_simple_test("L_BFu8s_BFu15s");
    static STRUCT_IF_C L_BFu8s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu15s, L_BFu8s_BFu15s)
//============================================================================


struct  L_BFu8s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 L_BFu8s_BFu16i) C1{ FL Fs:8 Fi:16}



static void Test_L_BFu8s_BFu16i()
{
  {
    init_simple_test("L_BFu8s_BFu16i");
    static STRUCT_IF_C L_BFu8s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu16i, L_BFu8s_BFu16i)
//============================================================================


struct  L_BFu8s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 L_BFu8s_BFu16ll) C1{ FL Fs:8 FL:16}



static void Test_L_BFu8s_BFu16ll()
{
  {
    init_simple_test("L_BFu8s_BFu16ll");
    static STRUCT_IF_C L_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu16ll, L_BFu8s_BFu16ll)
//============================================================================


struct  L_BFu8s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 L_BFu8s_BFu16s) C1{ FL Fs:8 Fs:16}



static void Test_L_BFu8s_BFu16s()
{
  {
    init_simple_test("L_BFu8s_BFu16s");
    static STRUCT_IF_C L_BFu8s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu16s, L_BFu8s_BFu16s)
//============================================================================


struct  L_BFu8s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 L_BFu8s_BFu17i) C1{ FL Fs:8 Fi:17}



static void Test_L_BFu8s_BFu17i()
{
  {
    init_simple_test("L_BFu8s_BFu17i");
    static STRUCT_IF_C L_BFu8s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu17i, L_BFu8s_BFu17i)
//============================================================================


struct  L_BFu8s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 L_BFu8s_BFu17ll) C1{ FL Fs:8 FL:17}



static void Test_L_BFu8s_BFu17ll()
{
  {
    init_simple_test("L_BFu8s_BFu17ll");
    static STRUCT_IF_C L_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu17ll, L_BFu8s_BFu17ll)
//============================================================================


struct  L_BFu8s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 L_BFu8s_BFu1c) C1{ FL Fs:8 Fc:1}



static void Test_L_BFu8s_BFu1c()
{
  {
    init_simple_test("L_BFu8s_BFu1c");
    static STRUCT_IF_C L_BFu8s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu1c, L_BFu8s_BFu1c)
//============================================================================


struct  L_BFu8s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 L_BFu8s_BFu1i) C1{ FL Fs:8 Fi:1}



static void Test_L_BFu8s_BFu1i()
{
  {
    init_simple_test("L_BFu8s_BFu1i");
    static STRUCT_IF_C L_BFu8s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu1i, L_BFu8s_BFu1i)
//============================================================================


struct  L_BFu8s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 L_BFu8s_BFu1ll) C1{ FL Fs:8 FL:1}



static void Test_L_BFu8s_BFu1ll()
{
  {
    init_simple_test("L_BFu8s_BFu1ll");
    static STRUCT_IF_C L_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu1ll, L_BFu8s_BFu1ll)
//============================================================================


struct  L_BFu8s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 L_BFu8s_BFu1s) C1{ FL Fs:8 Fs:1}



static void Test_L_BFu8s_BFu1s()
{
  {
    init_simple_test("L_BFu8s_BFu1s");
    static STRUCT_IF_C L_BFu8s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu1s, L_BFu8s_BFu1s)
//============================================================================


struct  L_BFu8s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 L_BFu8s_BFu31i) C1{ FL Fs:8 Fi:31}



static void Test_L_BFu8s_BFu31i()
{
  {
    init_simple_test("L_BFu8s_BFu31i");
    static STRUCT_IF_C L_BFu8s_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu31i, L_BFu8s_BFu31i)
//============================================================================


struct  L_BFu8s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 L_BFu8s_BFu31ll) C1{ FL Fs:8 FL:31}



static void Test_L_BFu8s_BFu31ll()
{
  {
    init_simple_test("L_BFu8s_BFu31ll");
    static STRUCT_IF_C L_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu31ll, L_BFu8s_BFu31ll)
//============================================================================


struct  L_BFu8s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 L_BFu8s_BFu32i) C1{ FL Fs:8 Fi:32}



static void Test_L_BFu8s_BFu32i()
{
  {
    init_simple_test("L_BFu8s_BFu32i");
    static STRUCT_IF_C L_BFu8s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu32i, L_BFu8s_BFu32i)
//============================================================================


struct  L_BFu8s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 L_BFu8s_BFu32ll) C1{ FL Fs:8 FL:32}



static void Test_L_BFu8s_BFu32ll()
{
  {
    init_simple_test("L_BFu8s_BFu32ll");
    static STRUCT_IF_C L_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu32ll, L_BFu8s_BFu32ll)
//============================================================================


struct  L_BFu8s_BFu33  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 L_BFu8s_BFu33) C1{ FL Fs:8 FL:33}



static void Test_L_BFu8s_BFu33()
{
  {
    init_simple_test("L_BFu8s_BFu33");
    static STRUCT_IF_C L_BFu8s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu33, L_BFu8s_BFu33)
//============================================================================


struct  L_BFu8s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 L_BFu8s_BFu7c) C1{ FL Fs:8 Fc:7}



static void Test_L_BFu8s_BFu7c()
{
  {
    init_simple_test("L_BFu8s_BFu7c");
    static STRUCT_IF_C L_BFu8s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu7c, L_BFu8s_BFu7c)
//============================================================================


struct  L_BFu8s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 L_BFu8s_BFu7i) C1{ FL Fs:8 Fi:7}



static void Test_L_BFu8s_BFu7i()
{
  {
    init_simple_test("L_BFu8s_BFu7i");
    static STRUCT_IF_C L_BFu8s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu7i, L_BFu8s_BFu7i)
//============================================================================


struct  L_BFu8s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 L_BFu8s_BFu7ll) C1{ FL Fs:8 FL:7}



static void Test_L_BFu8s_BFu7ll()
{
  {
    init_simple_test("L_BFu8s_BFu7ll");
    static STRUCT_IF_C L_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu7ll, L_BFu8s_BFu7ll)
//============================================================================


struct  L_BFu8s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 L_BFu8s_BFu7s) C1{ FL Fs:8 Fs:7}



static void Test_L_BFu8s_BFu7s()
{
  {
    init_simple_test("L_BFu8s_BFu7s");
    static STRUCT_IF_C L_BFu8s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu7s, L_BFu8s_BFu7s)
//============================================================================


struct  L_BFu8s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 L_BFu8s_BFu8c) C1{ FL Fs:8 Fc:8}



static void Test_L_BFu8s_BFu8c()
{
  {
    init_simple_test("L_BFu8s_BFu8c");
    static STRUCT_IF_C L_BFu8s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu8c, L_BFu8s_BFu8c)
//============================================================================


struct  L_BFu8s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 L_BFu8s_BFu8i) C1{ FL Fs:8 Fi:8}



static void Test_L_BFu8s_BFu8i()
{
  {
    init_simple_test("L_BFu8s_BFu8i");
    static STRUCT_IF_C L_BFu8s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu8i, L_BFu8s_BFu8i)
//============================================================================


struct  L_BFu8s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 L_BFu8s_BFu8ll) C1{ FL Fs:8 FL:8}



static void Test_L_BFu8s_BFu8ll()
{
  {
    init_simple_test("L_BFu8s_BFu8ll");
    static STRUCT_IF_C L_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu8ll, L_BFu8s_BFu8ll)
//============================================================================


struct  L_BFu8s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 L_BFu8s_BFu8s) C1{ FL Fs:8 Fs:8}



static void Test_L_BFu8s_BFu8s()
{
  {
    init_simple_test("L_BFu8s_BFu8s");
    static STRUCT_IF_C L_BFu8s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu8s, L_BFu8s_BFu8s)
//============================================================================


struct  L_BFu8s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 L_BFu8s_BFu9i) C1{ FL Fs:8 Fi:9}



static void Test_L_BFu8s_BFu9i()
{
  {
    init_simple_test("L_BFu8s_BFu9i");
    static STRUCT_IF_C L_BFu8s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu9i, L_BFu8s_BFu9i)
//============================================================================


struct  L_BFu8s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 L_BFu8s_BFu9ll) C1{ FL Fs:8 FL:9}



static void Test_L_BFu8s_BFu9ll()
{
  {
    init_simple_test("L_BFu8s_BFu9ll");
    static STRUCT_IF_C L_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu9ll, L_BFu8s_BFu9ll)
//============================================================================


struct  L_BFu8s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 L_BFu8s_BFu9s) C1{ FL Fs:8 Fs:9}



static void Test_L_BFu8s_BFu9s()
{
  {
    init_simple_test("L_BFu8s_BFu9s");
    static STRUCT_IF_C L_BFu8s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_BFu9s, L_BFu8s_BFu9s)
//============================================================================


struct  L_BFu8s_C  {
  __tsi64 v1;
  unsigned short v2:8;
  char v3;
};
//SIG(1 L_BFu8s_C) C1{ FL Fs:8 Fc}



static void Test_L_BFu8s_C()
{
  {
    init_simple_test("L_BFu8s_C");
    static STRUCT_IF_C L_BFu8s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_C)");
    check_field_offset(lv, v1, 0, "L_BFu8s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_C");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_C");
    check_field_offset(lv, v3, 9, "L_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_C, L_BFu8s_C)
//============================================================================


struct  L_BFu8s_D  {
  __tsi64 v1;
  unsigned short v2:8;
  double v3;
};
//SIG(1 L_BFu8s_D) C1{ FL Fs:8 FL}



static void Test_L_BFu8s_D()
{
  {
    init_simple_test("L_BFu8s_D");
    static STRUCT_IF_C L_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_D)");
    check_field_offset(lv, v1, 0, "L_BFu8s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_D");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_D, L_BFu8s_D)
//============================================================================


struct  L_BFu8s_F  {
  __tsi64 v1;
  unsigned short v2:8;
  float v3;
};
//SIG(1 L_BFu8s_F) C1{ FL Fs:8 Fi}



static void Test_L_BFu8s_F()
{
  {
    init_simple_test("L_BFu8s_F");
    static STRUCT_IF_C L_BFu8s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_F)");
    check_field_offset(lv, v1, 0, "L_BFu8s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_F");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_F");
    check_field_offset(lv, v3, 12, "L_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_F, L_BFu8s_F)
//============================================================================


struct  L_BFu8s_I  {
  __tsi64 v1;
  unsigned short v2:8;
  int v3;
};
//SIG(1 L_BFu8s_I) C1{ FL Fs:8 Fi}



static void Test_L_BFu8s_I()
{
  {
    init_simple_test("L_BFu8s_I");
    static STRUCT_IF_C L_BFu8s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_I)");
    check_field_offset(lv, v1, 0, "L_BFu8s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_I");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_I");
    check_field_offset(lv, v3, 12, "L_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_I, L_BFu8s_I)
//============================================================================


struct  L_BFu8s_Ip  {
  __tsi64 v1;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 L_BFu8s_Ip) C1{ FL Fs:8 Fp}



static void Test_L_BFu8s_Ip()
{
  {
    init_simple_test("L_BFu8s_Ip");
    static STRUCT_IF_C L_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Ip");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Ip, L_BFu8s_Ip)
//============================================================================


struct  L_BFu8s_L  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 L_BFu8s_L) C1{ FL Fs:8 FL}



static void Test_L_BFu8s_L()
{
  {
    init_simple_test("L_BFu8s_L");
    static STRUCT_IF_C L_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_L)");
    check_field_offset(lv, v1, 0, "L_BFu8s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_L");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_L, L_BFu8s_L)
//============================================================================


struct  L_BFu8s_S  {
  __tsi64 v1;
  unsigned short v2:8;
  short v3;
};
//SIG(1 L_BFu8s_S) C1{ FL Fs:8 Fs}



static void Test_L_BFu8s_S()
{
  {
    init_simple_test("L_BFu8s_S");
    static STRUCT_IF_C L_BFu8s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_S)");
    check_field_offset(lv, v1, 0, "L_BFu8s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_S");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_S");
    check_field_offset(lv, v3, 10, "L_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_S, L_BFu8s_S)
//============================================================================


struct  L_BFu8s_Uc  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 L_BFu8s_Uc) C1{ FL Fs:8 Fc}



static void Test_L_BFu8s_Uc()
{
  {
    init_simple_test("L_BFu8s_Uc");
    static STRUCT_IF_C L_BFu8s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Uc");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Uc");
    check_field_offset(lv, v3, 9, "L_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Uc, L_BFu8s_Uc)
//============================================================================


struct  L_BFu8s_Ui  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 L_BFu8s_Ui) C1{ FL Fs:8 Fi}



static void Test_L_BFu8s_Ui()
{
  {
    init_simple_test("L_BFu8s_Ui");
    static STRUCT_IF_C L_BFu8s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu8s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Ui");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Ui, L_BFu8s_Ui)
//============================================================================


struct  L_BFu8s_Ul  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 L_BFu8s_Ul) C1{ FL Fs:8 FL}



static void Test_L_BFu8s_Ul()
{
  {
    init_simple_test("L_BFu8s_Ul");
    static STRUCT_IF_C L_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Ul");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Ul, L_BFu8s_Ul)
//============================================================================


struct  L_BFu8s_Us  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 L_BFu8s_Us) C1{ FL Fs:8 Fs}



static void Test_L_BFu8s_Us()
{
  {
    init_simple_test("L_BFu8s_Us");
    static STRUCT_IF_C L_BFu8s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Us");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Us");
    check_field_offset(lv, v3, 10, "L_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Us, L_BFu8s_Us)
//============================================================================


struct  L_BFu8s_Vp  {
  __tsi64 v1;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 L_BFu8s_Vp) C1{ FL Fs:8 Fp}



static void Test_L_BFu8s_Vp()
{
  {
    init_simple_test("L_BFu8s_Vp");
    static STRUCT_IF_C L_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu8s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_Vp");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu8s_Vp, L_BFu8s_Vp)
//============================================================================


struct  L_BFu9i  {
  __tsi64 v1;
  unsigned int v2:9;
};
//SIG(1 L_BFu9i) C1{ FL Fi:9}



static void Test_L_BFu9i()
{
  {
    init_simple_test("L_BFu9i");
    static STRUCT_IF_C L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i, L_BFu9i)
//============================================================================


struct  L_BFu9i_BFu15i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 L_BFu9i_BFu15i) C1{ FL Fi:9 Fi:15}



static void Test_L_BFu9i_BFu15i()
{
  {
    init_simple_test("L_BFu9i_BFu15i");
    static STRUCT_IF_C L_BFu9i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu15i, L_BFu9i_BFu15i)
//============================================================================


struct  L_BFu9i_BFu15ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 L_BFu9i_BFu15ll) C1{ FL Fi:9 FL:15}



static void Test_L_BFu9i_BFu15ll()
{
  {
    init_simple_test("L_BFu9i_BFu15ll");
    static STRUCT_IF_C L_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu15ll, L_BFu9i_BFu15ll)
//============================================================================


struct  L_BFu9i_BFu15s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 L_BFu9i_BFu15s) C1{ FL Fi:9 Fs:15}



static void Test_L_BFu9i_BFu15s()
{
  {
    init_simple_test("L_BFu9i_BFu15s");
    static STRUCT_IF_C L_BFu9i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu15s, L_BFu9i_BFu15s)
//============================================================================


struct  L_BFu9i_BFu16i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 L_BFu9i_BFu16i) C1{ FL Fi:9 Fi:16}



static void Test_L_BFu9i_BFu16i()
{
  {
    init_simple_test("L_BFu9i_BFu16i");
    static STRUCT_IF_C L_BFu9i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu16i, L_BFu9i_BFu16i)
//============================================================================


struct  L_BFu9i_BFu16ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 L_BFu9i_BFu16ll) C1{ FL Fi:9 FL:16}



static void Test_L_BFu9i_BFu16ll()
{
  {
    init_simple_test("L_BFu9i_BFu16ll");
    static STRUCT_IF_C L_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu16ll, L_BFu9i_BFu16ll)
//============================================================================


struct  L_BFu9i_BFu16s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 L_BFu9i_BFu16s) C1{ FL Fi:9 Fs:16}



static void Test_L_BFu9i_BFu16s()
{
  {
    init_simple_test("L_BFu9i_BFu16s");
    static STRUCT_IF_C L_BFu9i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu16s, L_BFu9i_BFu16s)
//============================================================================


struct  L_BFu9i_BFu17i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 L_BFu9i_BFu17i) C1{ FL Fi:9 Fi:17}



static void Test_L_BFu9i_BFu17i()
{
  {
    init_simple_test("L_BFu9i_BFu17i");
    static STRUCT_IF_C L_BFu9i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu17i, L_BFu9i_BFu17i)
//============================================================================


struct  L_BFu9i_BFu17ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 L_BFu9i_BFu17ll) C1{ FL Fi:9 FL:17}



static void Test_L_BFu9i_BFu17ll()
{
  {
    init_simple_test("L_BFu9i_BFu17ll");
    static STRUCT_IF_C L_BFu9i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu17ll, L_BFu9i_BFu17ll)
//============================================================================


struct  L_BFu9i_BFu1c  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 L_BFu9i_BFu1c) C1{ FL Fi:9 Fc:1}



static void Test_L_BFu9i_BFu1c()
{
  {
    init_simple_test("L_BFu9i_BFu1c");
    static STRUCT_IF_C L_BFu9i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu1c, L_BFu9i_BFu1c)
//============================================================================


struct  L_BFu9i_BFu1i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 L_BFu9i_BFu1i) C1{ FL Fi:9 Fi:1}



static void Test_L_BFu9i_BFu1i()
{
  {
    init_simple_test("L_BFu9i_BFu1i");
    static STRUCT_IF_C L_BFu9i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu1i, L_BFu9i_BFu1i)
//============================================================================


struct  L_BFu9i_BFu1ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 L_BFu9i_BFu1ll) C1{ FL Fi:9 FL:1}



static void Test_L_BFu9i_BFu1ll()
{
  {
    init_simple_test("L_BFu9i_BFu1ll");
    static STRUCT_IF_C L_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu1ll, L_BFu9i_BFu1ll)
//============================================================================


struct  L_BFu9i_BFu1s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 L_BFu9i_BFu1s) C1{ FL Fi:9 Fs:1}



static void Test_L_BFu9i_BFu1s()
{
  {
    init_simple_test("L_BFu9i_BFu1s");
    static STRUCT_IF_C L_BFu9i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu1s, L_BFu9i_BFu1s)
//============================================================================


struct  L_BFu9i_BFu31i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 L_BFu9i_BFu31i) C1{ FL Fi:9 Fi:31}



static void Test_L_BFu9i_BFu31i()
{
  {
    init_simple_test("L_BFu9i_BFu31i");
    static STRUCT_IF_C L_BFu9i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu31i, L_BFu9i_BFu31i)
//============================================================================


struct  L_BFu9i_BFu31ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 L_BFu9i_BFu31ll) C1{ FL Fi:9 FL:31}



static void Test_L_BFu9i_BFu31ll()
{
  {
    init_simple_test("L_BFu9i_BFu31ll");
    static STRUCT_IF_C L_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, 1, "L_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, hide_ull(1LL<<30), "L_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu31ll, L_BFu9i_BFu31ll)
//============================================================================


struct  L_BFu9i_BFu32i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 L_BFu9i_BFu32i) C1{ FL Fi:9 Fi:32}



static void Test_L_BFu9i_BFu32i()
{
  {
    init_simple_test("L_BFu9i_BFu32i");
    static STRUCT_IF_C L_BFu9i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu32i, L_BFu9i_BFu32i)
//============================================================================


struct  L_BFu9i_BFu32ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 L_BFu9i_BFu32ll) C1{ FL Fi:9 FL:32}



static void Test_L_BFu9i_BFu32ll()
{
  {
    init_simple_test("L_BFu9i_BFu32ll");
    static STRUCT_IF_C L_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, 1, "L_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, hide_ull(1LL<<31), "L_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu32ll, L_BFu9i_BFu32ll)
//============================================================================


struct  L_BFu9i_BFu33  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 L_BFu9i_BFu33) C1{ FL Fi:9 FL:33}



static void Test_L_BFu9i_BFu33()
{
  {
    init_simple_test("L_BFu9i_BFu33");
    static STRUCT_IF_C L_BFu9i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, 1, "L_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, hide_ull(1LL<<32), "L_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu33, L_BFu9i_BFu33)
//============================================================================


struct  L_BFu9i_BFu7c  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 L_BFu9i_BFu7c) C1{ FL Fi:9 Fc:7}



static void Test_L_BFu9i_BFu7c()
{
  {
    init_simple_test("L_BFu9i_BFu7c");
    static STRUCT_IF_C L_BFu9i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu7c, L_BFu9i_BFu7c)
//============================================================================


struct  L_BFu9i_BFu7i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 L_BFu9i_BFu7i) C1{ FL Fi:9 Fi:7}



static void Test_L_BFu9i_BFu7i()
{
  {
    init_simple_test("L_BFu9i_BFu7i");
    static STRUCT_IF_C L_BFu9i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu7i, L_BFu9i_BFu7i)
//============================================================================


struct  L_BFu9i_BFu7ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 L_BFu9i_BFu7ll) C1{ FL Fi:9 FL:7}



static void Test_L_BFu9i_BFu7ll()
{
  {
    init_simple_test("L_BFu9i_BFu7ll");
    static STRUCT_IF_C L_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu7ll, L_BFu9i_BFu7ll)
//============================================================================


struct  L_BFu9i_BFu7s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 L_BFu9i_BFu7s) C1{ FL Fi:9 Fs:7}



static void Test_L_BFu9i_BFu7s()
{
  {
    init_simple_test("L_BFu9i_BFu7s");
    static STRUCT_IF_C L_BFu9i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu7s, L_BFu9i_BFu7s)
//============================================================================


struct  L_BFu9i_BFu8c  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 L_BFu9i_BFu8c) C1{ FL Fi:9 Fc:8}



static void Test_L_BFu9i_BFu8c()
{
  {
    init_simple_test("L_BFu9i_BFu8c");
    static STRUCT_IF_C L_BFu9i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu8c, L_BFu9i_BFu8c)
//============================================================================


struct  L_BFu9i_BFu8i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 L_BFu9i_BFu8i) C1{ FL Fi:9 Fi:8}



static void Test_L_BFu9i_BFu8i()
{
  {
    init_simple_test("L_BFu9i_BFu8i");
    static STRUCT_IF_C L_BFu9i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu8i, L_BFu9i_BFu8i)
//============================================================================


struct  L_BFu9i_BFu8ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 L_BFu9i_BFu8ll) C1{ FL Fi:9 FL:8}



static void Test_L_BFu9i_BFu8ll()
{
  {
    init_simple_test("L_BFu9i_BFu8ll");
    static STRUCT_IF_C L_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu8ll, L_BFu9i_BFu8ll)
//============================================================================


struct  L_BFu9i_BFu8s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 L_BFu9i_BFu8s) C1{ FL Fi:9 Fs:8}



static void Test_L_BFu9i_BFu8s()
{
  {
    init_simple_test("L_BFu9i_BFu8s");
    static STRUCT_IF_C L_BFu9i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu8s, L_BFu9i_BFu8s)
//============================================================================


struct  L_BFu9i_BFu9i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 L_BFu9i_BFu9i) C1{ FL Fi:9 Fi:9}



static void Test_L_BFu9i_BFu9i()
{
  {
    init_simple_test("L_BFu9i_BFu9i");
    static STRUCT_IF_C L_BFu9i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu9i, L_BFu9i_BFu9i)
//============================================================================


struct  L_BFu9i_BFu9ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 L_BFu9i_BFu9ll) C1{ FL Fi:9 FL:9}



static void Test_L_BFu9i_BFu9ll()
{
  {
    init_simple_test("L_BFu9i_BFu9ll");
    static STRUCT_IF_C L_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu9ll, L_BFu9i_BFu9ll)
//============================================================================


struct  L_BFu9i_BFu9s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 L_BFu9i_BFu9s) C1{ FL Fi:9 Fs:9}



static void Test_L_BFu9i_BFu9s()
{
  {
    init_simple_test("L_BFu9i_BFu9s");
    static STRUCT_IF_C L_BFu9i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_BFu9s, L_BFu9i_BFu9s)
//============================================================================


struct  L_BFu9i_C  {
  __tsi64 v1;
  unsigned int v2:9;
  char v3;
};
//SIG(1 L_BFu9i_C) C1{ FL Fi:9 Fc}



static void Test_L_BFu9i_C()
{
  {
    init_simple_test("L_BFu9i_C");
    static STRUCT_IF_C L_BFu9i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_C)");
    check_field_offset(lv, v1, 0, "L_BFu9i_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_C");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_C");
    check_field_offset(lv, v3, 10, "L_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_C, L_BFu9i_C)
//============================================================================


struct  L_BFu9i_D  {
  __tsi64 v1;
  unsigned int v2:9;
  double v3;
};
//SIG(1 L_BFu9i_D) C1{ FL Fi:9 FL}



static void Test_L_BFu9i_D()
{
  {
    init_simple_test("L_BFu9i_D");
    static STRUCT_IF_C L_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_D)");
    check_field_offset(lv, v1, 0, "L_BFu9i_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_D");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_D, L_BFu9i_D)
//============================================================================


struct  L_BFu9i_F  {
  __tsi64 v1;
  unsigned int v2:9;
  float v3;
};
//SIG(1 L_BFu9i_F) C1{ FL Fi:9 Fi}



static void Test_L_BFu9i_F()
{
  {
    init_simple_test("L_BFu9i_F");
    static STRUCT_IF_C L_BFu9i_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_F)");
    check_field_offset(lv, v1, 0, "L_BFu9i_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_F");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_F");
    check_field_offset(lv, v3, 12, "L_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_F, L_BFu9i_F)
//============================================================================


struct  L_BFu9i_I  {
  __tsi64 v1;
  unsigned int v2:9;
  int v3;
};
//SIG(1 L_BFu9i_I) C1{ FL Fi:9 Fi}



static void Test_L_BFu9i_I()
{
  {
    init_simple_test("L_BFu9i_I");
    static STRUCT_IF_C L_BFu9i_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_I)");
    check_field_offset(lv, v1, 0, "L_BFu9i_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_I");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_I");
    check_field_offset(lv, v3, 12, "L_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_I, L_BFu9i_I)
//============================================================================


struct  L_BFu9i_Ip  {
  __tsi64 v1;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 L_BFu9i_Ip) C1{ FL Fi:9 Fp}



static void Test_L_BFu9i_Ip()
{
  {
    init_simple_test("L_BFu9i_Ip");
    static STRUCT_IF_C L_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Ip");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Ip, L_BFu9i_Ip)
//============================================================================


struct  L_BFu9i_L  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 L_BFu9i_L) C1{ FL Fi:9 FL}



static void Test_L_BFu9i_L()
{
  {
    init_simple_test("L_BFu9i_L");
    static STRUCT_IF_C L_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_L)");
    check_field_offset(lv, v1, 0, "L_BFu9i_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_L");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_L, L_BFu9i_L)
//============================================================================


struct  L_BFu9i_S  {
  __tsi64 v1;
  unsigned int v2:9;
  short v3;
};
//SIG(1 L_BFu9i_S) C1{ FL Fi:9 Fs}



static void Test_L_BFu9i_S()
{
  {
    init_simple_test("L_BFu9i_S");
    static STRUCT_IF_C L_BFu9i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_S)");
    check_field_offset(lv, v1, 0, "L_BFu9i_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_S");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_S");
    check_field_offset(lv, v3, 10, "L_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_S, L_BFu9i_S)
//============================================================================


struct  L_BFu9i_Uc  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 L_BFu9i_Uc) C1{ FL Fi:9 Fc}



static void Test_L_BFu9i_Uc()
{
  {
    init_simple_test("L_BFu9i_Uc");
    static STRUCT_IF_C L_BFu9i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Uc");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Uc");
    check_field_offset(lv, v3, 10, "L_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Uc, L_BFu9i_Uc)
//============================================================================


struct  L_BFu9i_Ui  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 L_BFu9i_Ui) C1{ FL Fi:9 Fi}



static void Test_L_BFu9i_Ui()
{
  {
    init_simple_test("L_BFu9i_Ui");
    static STRUCT_IF_C L_BFu9i_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Ui");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Ui");
    check_field_offset(lv, v3, 12, "L_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Ui, L_BFu9i_Ui)
//============================================================================


struct  L_BFu9i_Ul  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 L_BFu9i_Ul) C1{ FL Fi:9 FL}



static void Test_L_BFu9i_Ul()
{
  {
    init_simple_test("L_BFu9i_Ul");
    static STRUCT_IF_C L_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Ul");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Ul, L_BFu9i_Ul)
//============================================================================


struct  L_BFu9i_Us  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 L_BFu9i_Us) C1{ FL Fi:9 Fs}



static void Test_L_BFu9i_Us()
{
  {
    init_simple_test("L_BFu9i_Us");
    static STRUCT_IF_C L_BFu9i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Us");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Us");
    check_field_offset(lv, v3, 10, "L_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Us, L_BFu9i_Us)
//============================================================================


struct  L_BFu9i_Vp  {
  __tsi64 v1;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 L_BFu9i_Vp) C1{ FL Fi:9 Fp}



static void Test_L_BFu9i_Vp()
{
  {
    init_simple_test("L_BFu9i_Vp");
    static STRUCT_IF_C L_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu9i_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_Vp");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9i_Vp, L_BFu9i_Vp)
//============================================================================


struct  L_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:9;
};
//SIG(1 L_BFu9ll) C1{ FL FL:9}



static void Test_L_BFu9ll()
{
  {
    init_simple_test("L_BFu9ll");
    static STRUCT_IF_C L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll, L_BFu9ll)
//============================================================================


struct  L_BFu9ll_BFu15i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 L_BFu9ll_BFu15i) C1{ FL FL:9 Fi:15}



static void Test_L_BFu9ll_BFu15i()
{
  {
    init_simple_test("L_BFu9ll_BFu15i");
    static STRUCT_IF_C L_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu15i, L_BFu9ll_BFu15i)
//============================================================================


struct  L_BFu9ll_BFu15ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 L_BFu9ll_BFu15ll) C1{ FL FL:9 FL:15}



static void Test_L_BFu9ll_BFu15ll()
{
  {
    init_simple_test("L_BFu9ll_BFu15ll");
    static STRUCT_IF_C L_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu15ll, L_BFu9ll_BFu15ll)
//============================================================================


struct  L_BFu9ll_BFu15s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 L_BFu9ll_BFu15s) C1{ FL FL:9 Fs:15}



static void Test_L_BFu9ll_BFu15s()
{
  {
    init_simple_test("L_BFu9ll_BFu15s");
    static STRUCT_IF_C L_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu15s, L_BFu9ll_BFu15s)
//============================================================================


struct  L_BFu9ll_BFu16i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 L_BFu9ll_BFu16i) C1{ FL FL:9 Fi:16}



static void Test_L_BFu9ll_BFu16i()
{
  {
    init_simple_test("L_BFu9ll_BFu16i");
    static STRUCT_IF_C L_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu16i, L_BFu9ll_BFu16i)
//============================================================================


struct  L_BFu9ll_BFu16ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 L_BFu9ll_BFu16ll) C1{ FL FL:9 FL:16}



static void Test_L_BFu9ll_BFu16ll()
{
  {
    init_simple_test("L_BFu9ll_BFu16ll");
    static STRUCT_IF_C L_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu16ll, L_BFu9ll_BFu16ll)
//============================================================================


struct  L_BFu9ll_BFu16s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 L_BFu9ll_BFu16s) C1{ FL FL:9 Fs:16}



static void Test_L_BFu9ll_BFu16s()
{
  {
    init_simple_test("L_BFu9ll_BFu16s");
    static STRUCT_IF_C L_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu16s, L_BFu9ll_BFu16s)
//============================================================================


struct  L_BFu9ll_BFu17i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 L_BFu9ll_BFu17i) C1{ FL FL:9 Fi:17}



static void Test_L_BFu9ll_BFu17i()
{
  {
    init_simple_test("L_BFu9ll_BFu17i");
    static STRUCT_IF_C L_BFu9ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu17i, L_BFu9ll_BFu17i)
//============================================================================


struct  L_BFu9ll_BFu17ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 L_BFu9ll_BFu17ll) C1{ FL FL:9 FL:17}



static void Test_L_BFu9ll_BFu17ll()
{
  {
    init_simple_test("L_BFu9ll_BFu17ll");
    static STRUCT_IF_C L_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu17ll, L_BFu9ll_BFu17ll)
//============================================================================


struct  L_BFu9ll_BFu1c  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 L_BFu9ll_BFu1c) C1{ FL FL:9 Fc:1}



static void Test_L_BFu9ll_BFu1c()
{
  {
    init_simple_test("L_BFu9ll_BFu1c");
    static STRUCT_IF_C L_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu1c, L_BFu9ll_BFu1c)
//============================================================================


struct  L_BFu9ll_BFu1i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 L_BFu9ll_BFu1i) C1{ FL FL:9 Fi:1}



static void Test_L_BFu9ll_BFu1i()
{
  {
    init_simple_test("L_BFu9ll_BFu1i");
    static STRUCT_IF_C L_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu1i, L_BFu9ll_BFu1i)
//============================================================================


struct  L_BFu9ll_BFu1ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 L_BFu9ll_BFu1ll) C1{ FL FL:9 FL:1}



static void Test_L_BFu9ll_BFu1ll()
{
  {
    init_simple_test("L_BFu9ll_BFu1ll");
    static STRUCT_IF_C L_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu1ll, L_BFu9ll_BFu1ll)
//============================================================================


struct  L_BFu9ll_BFu1s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 L_BFu9ll_BFu1s) C1{ FL FL:9 Fs:1}



static void Test_L_BFu9ll_BFu1s()
{
  {
    init_simple_test("L_BFu9ll_BFu1s");
    static STRUCT_IF_C L_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu1s, L_BFu9ll_BFu1s)
//============================================================================


struct  L_BFu9ll_BFu31i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 L_BFu9ll_BFu31i) C1{ FL FL:9 Fi:31}



static void Test_L_BFu9ll_BFu31i()
{
  {
    init_simple_test("L_BFu9ll_BFu31i");
    static STRUCT_IF_C L_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu31i, L_BFu9ll_BFu31i)
//============================================================================


struct  L_BFu9ll_BFu31ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 L_BFu9ll_BFu31ll) C1{ FL FL:9 FL:31}



static void Test_L_BFu9ll_BFu31ll()
{
  {
    init_simple_test("L_BFu9ll_BFu31ll");
    static STRUCT_IF_C L_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, 1, "L_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, hide_ull(1LL<<30), "L_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu31ll, L_BFu9ll_BFu31ll)
//============================================================================


struct  L_BFu9ll_BFu32i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 L_BFu9ll_BFu32i) C1{ FL FL:9 Fi:32}



static void Test_L_BFu9ll_BFu32i()
{
  {
    init_simple_test("L_BFu9ll_BFu32i");
    static STRUCT_IF_C L_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu32i, L_BFu9ll_BFu32i)
//============================================================================


struct  L_BFu9ll_BFu32ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 L_BFu9ll_BFu32ll) C1{ FL FL:9 FL:32}



static void Test_L_BFu9ll_BFu32ll()
{
  {
    init_simple_test("L_BFu9ll_BFu32ll");
    static STRUCT_IF_C L_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, 1, "L_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, hide_ull(1LL<<31), "L_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu32ll, L_BFu9ll_BFu32ll)
//============================================================================


struct  L_BFu9ll_BFu33  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 L_BFu9ll_BFu33) C1{ FL FL:9 FL:33}



static void Test_L_BFu9ll_BFu33()
{
  {
    init_simple_test("L_BFu9ll_BFu33");
    static STRUCT_IF_C L_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, 1, "L_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, hide_ull(1LL<<32), "L_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu33, L_BFu9ll_BFu33)
//============================================================================


struct  L_BFu9ll_BFu7c  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 L_BFu9ll_BFu7c) C1{ FL FL:9 Fc:7}



static void Test_L_BFu9ll_BFu7c()
{
  {
    init_simple_test("L_BFu9ll_BFu7c");
    static STRUCT_IF_C L_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu7c, L_BFu9ll_BFu7c)
//============================================================================


struct  L_BFu9ll_BFu7i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 L_BFu9ll_BFu7i) C1{ FL FL:9 Fi:7}



static void Test_L_BFu9ll_BFu7i()
{
  {
    init_simple_test("L_BFu9ll_BFu7i");
    static STRUCT_IF_C L_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu7i, L_BFu9ll_BFu7i)
//============================================================================


struct  L_BFu9ll_BFu7ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 L_BFu9ll_BFu7ll) C1{ FL FL:9 FL:7}



static void Test_L_BFu9ll_BFu7ll()
{
  {
    init_simple_test("L_BFu9ll_BFu7ll");
    static STRUCT_IF_C L_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu7ll, L_BFu9ll_BFu7ll)
//============================================================================


struct  L_BFu9ll_BFu7s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 L_BFu9ll_BFu7s) C1{ FL FL:9 Fs:7}



static void Test_L_BFu9ll_BFu7s()
{
  {
    init_simple_test("L_BFu9ll_BFu7s");
    static STRUCT_IF_C L_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu7s, L_BFu9ll_BFu7s)
//============================================================================


struct  L_BFu9ll_BFu8c  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 L_BFu9ll_BFu8c) C1{ FL FL:9 Fc:8}



static void Test_L_BFu9ll_BFu8c()
{
  {
    init_simple_test("L_BFu9ll_BFu8c");
    static STRUCT_IF_C L_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu8c, L_BFu9ll_BFu8c)
//============================================================================


struct  L_BFu9ll_BFu8i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 L_BFu9ll_BFu8i) C1{ FL FL:9 Fi:8}



static void Test_L_BFu9ll_BFu8i()
{
  {
    init_simple_test("L_BFu9ll_BFu8i");
    static STRUCT_IF_C L_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu8i, L_BFu9ll_BFu8i)
//============================================================================


struct  L_BFu9ll_BFu8ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 L_BFu9ll_BFu8ll) C1{ FL FL:9 FL:8}



static void Test_L_BFu9ll_BFu8ll()
{
  {
    init_simple_test("L_BFu9ll_BFu8ll");
    static STRUCT_IF_C L_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu8ll, L_BFu9ll_BFu8ll)
//============================================================================


struct  L_BFu9ll_BFu8s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 L_BFu9ll_BFu8s) C1{ FL FL:9 Fs:8}



static void Test_L_BFu9ll_BFu8s()
{
  {
    init_simple_test("L_BFu9ll_BFu8s");
    static STRUCT_IF_C L_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu8s, L_BFu9ll_BFu8s)
//============================================================================


struct  L_BFu9ll_BFu9i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 L_BFu9ll_BFu9i) C1{ FL FL:9 Fi:9}



static void Test_L_BFu9ll_BFu9i()
{
  {
    init_simple_test("L_BFu9ll_BFu9i");
    static STRUCT_IF_C L_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu9i, L_BFu9ll_BFu9i)
//============================================================================


struct  L_BFu9ll_BFu9ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 L_BFu9ll_BFu9ll) C1{ FL FL:9 FL:9}



static void Test_L_BFu9ll_BFu9ll()
{
  {
    init_simple_test("L_BFu9ll_BFu9ll");
    static STRUCT_IF_C L_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu9ll, L_BFu9ll_BFu9ll)
//============================================================================


struct  L_BFu9ll_BFu9s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 L_BFu9ll_BFu9s) C1{ FL FL:9 Fs:9}



static void Test_L_BFu9ll_BFu9s()
{
  {
    init_simple_test("L_BFu9ll_BFu9s");
    static STRUCT_IF_C L_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_BFu9s, L_BFu9ll_BFu9s)
//============================================================================


struct  L_BFu9ll_C  {
  __tsi64 v1;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 L_BFu9ll_C) C1{ FL FL:9 Fc}



static void Test_L_BFu9ll_C()
{
  {
    init_simple_test("L_BFu9ll_C");
    static STRUCT_IF_C L_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_C");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_C");
    check_field_offset(lv, v3, 10, "L_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_C, L_BFu9ll_C)
//============================================================================


struct  L_BFu9ll_D  {
  __tsi64 v1;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 L_BFu9ll_D) C1{ FL FL:9 FL}



static void Test_L_BFu9ll_D()
{
  {
    init_simple_test("L_BFu9ll_D");
    static STRUCT_IF_C L_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_D");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_D, L_BFu9ll_D)
//============================================================================


struct  L_BFu9ll_F  {
  __tsi64 v1;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 L_BFu9ll_F) C1{ FL FL:9 Fi}



static void Test_L_BFu9ll_F()
{
  {
    init_simple_test("L_BFu9ll_F");
    static STRUCT_IF_C L_BFu9ll_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_F");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_F");
    check_field_offset(lv, v3, 12, "L_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_F, L_BFu9ll_F)
//============================================================================


struct  L_BFu9ll_I  {
  __tsi64 v1;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 L_BFu9ll_I) C1{ FL FL:9 Fi}



static void Test_L_BFu9ll_I()
{
  {
    init_simple_test("L_BFu9ll_I");
    static STRUCT_IF_C L_BFu9ll_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_I");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_I");
    check_field_offset(lv, v3, 12, "L_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_I, L_BFu9ll_I)
//============================================================================


struct  L_BFu9ll_Ip  {
  __tsi64 v1;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 L_BFu9ll_Ip) C1{ FL FL:9 Fp}



static void Test_L_BFu9ll_Ip()
{
  {
    init_simple_test("L_BFu9ll_Ip");
    static STRUCT_IF_C L_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Ip, L_BFu9ll_Ip)
//============================================================================


struct  L_BFu9ll_L  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 L_BFu9ll_L) C1{ FL FL:9 FL}



static void Test_L_BFu9ll_L()
{
  {
    init_simple_test("L_BFu9ll_L");
    static STRUCT_IF_C L_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_L");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_L, L_BFu9ll_L)
//============================================================================


struct  L_BFu9ll_S  {
  __tsi64 v1;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 L_BFu9ll_S) C1{ FL FL:9 Fs}



static void Test_L_BFu9ll_S()
{
  {
    init_simple_test("L_BFu9ll_S");
    static STRUCT_IF_C L_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_S");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_S");
    check_field_offset(lv, v3, 10, "L_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_S, L_BFu9ll_S)
//============================================================================


struct  L_BFu9ll_Uc  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 L_BFu9ll_Uc) C1{ FL FL:9 Fc}



static void Test_L_BFu9ll_Uc()
{
  {
    init_simple_test("L_BFu9ll_Uc");
    static STRUCT_IF_C L_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Uc");
    check_field_offset(lv, v3, 10, "L_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Uc, L_BFu9ll_Uc)
//============================================================================


struct  L_BFu9ll_Ui  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 L_BFu9ll_Ui) C1{ FL FL:9 Fi}



static void Test_L_BFu9ll_Ui()
{
  {
    init_simple_test("L_BFu9ll_Ui");
    static STRUCT_IF_C L_BFu9ll_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Ui");
    check_field_offset(lv, v3, 12, "L_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Ui, L_BFu9ll_Ui)
//============================================================================


struct  L_BFu9ll_Ul  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 L_BFu9ll_Ul) C1{ FL FL:9 FL}



static void Test_L_BFu9ll_Ul()
{
  {
    init_simple_test("L_BFu9ll_Ul");
    static STRUCT_IF_C L_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Ul, L_BFu9ll_Ul)
//============================================================================


struct  L_BFu9ll_Us  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 L_BFu9ll_Us) C1{ FL FL:9 Fs}



static void Test_L_BFu9ll_Us()
{
  {
    init_simple_test("L_BFu9ll_Us");
    static STRUCT_IF_C L_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Us");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Us");
    check_field_offset(lv, v3, 10, "L_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Us, L_BFu9ll_Us)
//============================================================================


struct  L_BFu9ll_Vp  {
  __tsi64 v1;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 L_BFu9ll_Vp) C1{ FL FL:9 Fp}



static void Test_L_BFu9ll_Vp()
{
  {
    init_simple_test("L_BFu9ll_Vp");
    static STRUCT_IF_C L_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9ll_Vp, L_BFu9ll_Vp)
//============================================================================


struct  L_BFu9s  {
  __tsi64 v1;
  unsigned short v2:9;
};
//SIG(1 L_BFu9s) C1{ FL Fs:9}



static void Test_L_BFu9s()
{
  {
    init_simple_test("L_BFu9s");
    static STRUCT_IF_C L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s, L_BFu9s)
//============================================================================


struct  L_BFu9s_BFu15i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 L_BFu9s_BFu15i) C1{ FL Fs:9 Fi:15}



static void Test_L_BFu9s_BFu15i()
{
  {
    init_simple_test("L_BFu9s_BFu15i");
    static STRUCT_IF_C L_BFu9s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu15i, L_BFu9s_BFu15i)
//============================================================================


struct  L_BFu9s_BFu15ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 L_BFu9s_BFu15ll) C1{ FL Fs:9 FL:15}



static void Test_L_BFu9s_BFu15ll()
{
  {
    init_simple_test("L_BFu9s_BFu15ll");
    static STRUCT_IF_C L_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, 1, "L_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 9, 1, 15, hide_ull(1LL<<14), "L_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu15ll, L_BFu9s_BFu15ll)
//============================================================================


struct  L_BFu9s_BFu15s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 L_BFu9s_BFu15s) C1{ FL Fs:9 Fs:15}



static void Test_L_BFu9s_BFu15s()
{
  {
    init_simple_test("L_BFu9s_BFu15s");
    static STRUCT_IF_C L_BFu9s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu15s, L_BFu9s_BFu15s)
//============================================================================


struct  L_BFu9s_BFu16i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 L_BFu9s_BFu16i) C1{ FL Fs:9 Fi:16}



static void Test_L_BFu9s_BFu16i()
{
  {
    init_simple_test("L_BFu9s_BFu16i");
    static STRUCT_IF_C L_BFu9s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu16i, L_BFu9s_BFu16i)
//============================================================================


struct  L_BFu9s_BFu16ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 L_BFu9s_BFu16ll) C1{ FL Fs:9 FL:16}



static void Test_L_BFu9s_BFu16ll()
{
  {
    init_simple_test("L_BFu9s_BFu16ll");
    static STRUCT_IF_C L_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, 1, "L_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 9, 1, 16, hide_ull(1LL<<15), "L_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu16ll, L_BFu9s_BFu16ll)
//============================================================================


struct  L_BFu9s_BFu16s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 L_BFu9s_BFu16s) C1{ FL Fs:9 Fs:16}



static void Test_L_BFu9s_BFu16s()
{
  {
    init_simple_test("L_BFu9s_BFu16s");
    static STRUCT_IF_C L_BFu9s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu16s, L_BFu9s_BFu16s)
//============================================================================


struct  L_BFu9s_BFu17i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 L_BFu9s_BFu17i) C1{ FL Fs:9 Fi:17}



static void Test_L_BFu9s_BFu17i()
{
  {
    init_simple_test("L_BFu9s_BFu17i");
    static STRUCT_IF_C L_BFu9s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu17i, L_BFu9s_BFu17i)
//============================================================================


struct  L_BFu9s_BFu17ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 L_BFu9s_BFu17ll) C1{ FL Fs:9 FL:17}



static void Test_L_BFu9s_BFu17ll()
{
  {
    init_simple_test("L_BFu9s_BFu17ll");
    static STRUCT_IF_C L_BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, 1, "L_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 9, 1, 17, hide_ull(1LL<<16), "L_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu17ll, L_BFu9s_BFu17ll)
//============================================================================


struct  L_BFu9s_BFu1c  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 L_BFu9s_BFu1c) C1{ FL Fs:9 Fc:1}



static void Test_L_BFu9s_BFu1c()
{
  {
    init_simple_test("L_BFu9s_BFu1c");
    static STRUCT_IF_C L_BFu9s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu1c, L_BFu9s_BFu1c)
//============================================================================


struct  L_BFu9s_BFu1i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 L_BFu9s_BFu1i) C1{ FL Fs:9 Fi:1}



static void Test_L_BFu9s_BFu1i()
{
  {
    init_simple_test("L_BFu9s_BFu1i");
    static STRUCT_IF_C L_BFu9s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu1i, L_BFu9s_BFu1i)
//============================================================================


struct  L_BFu9s_BFu1ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 L_BFu9s_BFu1ll) C1{ FL Fs:9 FL:1}



static void Test_L_BFu9s_BFu1ll()
{
  {
    init_simple_test("L_BFu9s_BFu1ll");
    static STRUCT_IF_C L_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu1ll, L_BFu9s_BFu1ll)
//============================================================================


struct  L_BFu9s_BFu1s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 L_BFu9s_BFu1s) C1{ FL Fs:9 Fs:1}



static void Test_L_BFu9s_BFu1s()
{
  {
    init_simple_test("L_BFu9s_BFu1s");
    static STRUCT_IF_C L_BFu9s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 9, 1, 1, 1, "L_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu1s, L_BFu9s_BFu1s)
//============================================================================


struct  L_BFu9s_BFu31i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 L_BFu9s_BFu31i) C1{ FL Fs:9 Fi:31}



static void Test_L_BFu9s_BFu31i()
{
  {
    init_simple_test("L_BFu9s_BFu31i");
    static STRUCT_IF_C L_BFu9s_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu31i, L_BFu9s_BFu31i)
//============================================================================


struct  L_BFu9s_BFu31ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 L_BFu9s_BFu31ll) C1{ FL Fs:9 FL:31}



static void Test_L_BFu9s_BFu31ll()
{
  {
    init_simple_test("L_BFu9s_BFu31ll");
    static STRUCT_IF_C L_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, 1, "L_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 9, 1, 31, hide_ull(1LL<<30), "L_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu31ll, L_BFu9s_BFu31ll)
//============================================================================


struct  L_BFu9s_BFu32i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 L_BFu9s_BFu32i) C1{ FL Fs:9 Fi:32}



static void Test_L_BFu9s_BFu32i()
{
  {
    init_simple_test("L_BFu9s_BFu32i");
    static STRUCT_IF_C L_BFu9s_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu32i, L_BFu9s_BFu32i)
//============================================================================


struct  L_BFu9s_BFu32ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 L_BFu9s_BFu32ll) C1{ FL Fs:9 FL:32}



static void Test_L_BFu9s_BFu32ll()
{
  {
    init_simple_test("L_BFu9s_BFu32ll");
    static STRUCT_IF_C L_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, 1, "L_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 9, 1, 32, hide_ull(1LL<<31), "L_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu32ll, L_BFu9s_BFu32ll)
//============================================================================


struct  L_BFu9s_BFu33  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 L_BFu9s_BFu33) C1{ FL Fs:9 FL:33}



static void Test_L_BFu9s_BFu33()
{
  {
    init_simple_test("L_BFu9s_BFu33");
    static STRUCT_IF_C L_BFu9s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, 1, "L_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 9, 1, 33, hide_ull(1LL<<32), "L_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu33, L_BFu9s_BFu33)
//============================================================================


struct  L_BFu9s_BFu7c  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 L_BFu9s_BFu7c) C1{ FL Fs:9 Fc:7}



static void Test_L_BFu9s_BFu7c()
{
  {
    init_simple_test("L_BFu9s_BFu7c");
    static STRUCT_IF_C L_BFu9s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu7c, L_BFu9s_BFu7c)
//============================================================================


struct  L_BFu9s_BFu7i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 L_BFu9s_BFu7i) C1{ FL Fs:9 Fi:7}



static void Test_L_BFu9s_BFu7i()
{
  {
    init_simple_test("L_BFu9s_BFu7i");
    static STRUCT_IF_C L_BFu9s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu7i, L_BFu9s_BFu7i)
//============================================================================


struct  L_BFu9s_BFu7ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 L_BFu9s_BFu7ll) C1{ FL Fs:9 FL:7}



static void Test_L_BFu9s_BFu7ll()
{
  {
    init_simple_test("L_BFu9s_BFu7ll");
    static STRUCT_IF_C L_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu7ll, L_BFu9s_BFu7ll)
//============================================================================


struct  L_BFu9s_BFu7s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 L_BFu9s_BFu7s) C1{ FL Fs:9 Fs:7}



static void Test_L_BFu9s_BFu7s()
{
  {
    init_simple_test("L_BFu9s_BFu7s");
    static STRUCT_IF_C L_BFu9s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, 1, "L_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 9, 1, 7, hide_ull(1LL<<6), "L_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu7s, L_BFu9s_BFu7s)
//============================================================================


struct  L_BFu9s_BFu8c  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 L_BFu9s_BFu8c) C1{ FL Fs:9 Fc:8}



static void Test_L_BFu9s_BFu8c()
{
  {
    init_simple_test("L_BFu9s_BFu8c");
    static STRUCT_IF_C L_BFu9s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu8c, L_BFu9s_BFu8c)
//============================================================================


struct  L_BFu9s_BFu8i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 L_BFu9s_BFu8i) C1{ FL Fs:9 Fi:8}



static void Test_L_BFu9s_BFu8i()
{
  {
    init_simple_test("L_BFu9s_BFu8i");
    static STRUCT_IF_C L_BFu9s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu8i, L_BFu9s_BFu8i)
//============================================================================


struct  L_BFu9s_BFu8ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 L_BFu9s_BFu8ll) C1{ FL Fs:9 FL:8}



static void Test_L_BFu9s_BFu8ll()
{
  {
    init_simple_test("L_BFu9s_BFu8ll");
    static STRUCT_IF_C L_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, 1, "L_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 9, 1, 8, hide_ull(1LL<<7), "L_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu8ll, L_BFu9s_BFu8ll)
//============================================================================


struct  L_BFu9s_BFu8s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 L_BFu9s_BFu8s) C1{ FL Fs:9 Fs:8}



static void Test_L_BFu9s_BFu8s()
{
  {
    init_simple_test("L_BFu9s_BFu8s");
    static STRUCT_IF_C L_BFu9s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu8s, L_BFu9s_BFu8s)
//============================================================================


struct  L_BFu9s_BFu9i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 L_BFu9s_BFu9i) C1{ FL Fs:9 Fi:9}



static void Test_L_BFu9s_BFu9i()
{
  {
    init_simple_test("L_BFu9s_BFu9i");
    static STRUCT_IF_C L_BFu9s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu9i, L_BFu9s_BFu9i)
//============================================================================


struct  L_BFu9s_BFu9ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 L_BFu9s_BFu9ll) C1{ FL Fs:9 FL:9}



static void Test_L_BFu9s_BFu9ll()
{
  {
    init_simple_test("L_BFu9s_BFu9ll");
    static STRUCT_IF_C L_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, 1, "L_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 9, 1, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu9ll, L_BFu9s_BFu9ll)
//============================================================================


struct  L_BFu9s_BFu9s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 L_BFu9s_BFu9s) C1{ FL Fs:9 Fs:9}



static void Test_L_BFu9s_BFu9s()
{
  {
    init_simple_test("L_BFu9s_BFu9s");
    static STRUCT_IF_C L_BFu9s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_BFu9s, L_BFu9s_BFu9s)
//============================================================================


struct  L_BFu9s_C  {
  __tsi64 v1;
  unsigned short v2:9;
  char v3;
};
//SIG(1 L_BFu9s_C) C1{ FL Fs:9 Fc}



static void Test_L_BFu9s_C()
{
  {
    init_simple_test("L_BFu9s_C");
    static STRUCT_IF_C L_BFu9s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_C)");
    check_field_offset(lv, v1, 0, "L_BFu9s_C.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_C");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_C");
    check_field_offset(lv, v3, 10, "L_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_C, L_BFu9s_C)
//============================================================================


struct  L_BFu9s_D  {
  __tsi64 v1;
  unsigned short v2:9;
  double v3;
};
//SIG(1 L_BFu9s_D) C1{ FL Fs:9 FL}



static void Test_L_BFu9s_D()
{
  {
    init_simple_test("L_BFu9s_D");
    static STRUCT_IF_C L_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_D)");
    check_field_offset(lv, v1, 0, "L_BFu9s_D.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_D");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_D, L_BFu9s_D)
//============================================================================


struct  L_BFu9s_F  {
  __tsi64 v1;
  unsigned short v2:9;
  float v3;
};
//SIG(1 L_BFu9s_F) C1{ FL Fs:9 Fi}



static void Test_L_BFu9s_F()
{
  {
    init_simple_test("L_BFu9s_F");
    static STRUCT_IF_C L_BFu9s_F lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_F)");
    check_field_offset(lv, v1, 0, "L_BFu9s_F.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_F");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_F");
    check_field_offset(lv, v3, 12, "L_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_F, L_BFu9s_F)
//============================================================================


struct  L_BFu9s_I  {
  __tsi64 v1;
  unsigned short v2:9;
  int v3;
};
//SIG(1 L_BFu9s_I) C1{ FL Fs:9 Fi}



static void Test_L_BFu9s_I()
{
  {
    init_simple_test("L_BFu9s_I");
    static STRUCT_IF_C L_BFu9s_I lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_I)");
    check_field_offset(lv, v1, 0, "L_BFu9s_I.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_I");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_I");
    check_field_offset(lv, v3, 12, "L_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_I, L_BFu9s_I)
//============================================================================


struct  L_BFu9s_Ip  {
  __tsi64 v1;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 L_BFu9s_Ip) C1{ FL Fs:9 Fp}



static void Test_L_BFu9s_Ip()
{
  {
    init_simple_test("L_BFu9s_Ip");
    static STRUCT_IF_C L_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Ip.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Ip");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Ip, L_BFu9s_Ip)
//============================================================================


struct  L_BFu9s_L  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 L_BFu9s_L) C1{ FL Fs:9 FL}



static void Test_L_BFu9s_L()
{
  {
    init_simple_test("L_BFu9s_L");
    static STRUCT_IF_C L_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_L)");
    check_field_offset(lv, v1, 0, "L_BFu9s_L.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_L");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_L, L_BFu9s_L)
//============================================================================


struct  L_BFu9s_S  {
  __tsi64 v1;
  unsigned short v2:9;
  short v3;
};
//SIG(1 L_BFu9s_S) C1{ FL Fs:9 Fs}



static void Test_L_BFu9s_S()
{
  {
    init_simple_test("L_BFu9s_S");
    static STRUCT_IF_C L_BFu9s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_S)");
    check_field_offset(lv, v1, 0, "L_BFu9s_S.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_S");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_S");
    check_field_offset(lv, v3, 10, "L_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_S, L_BFu9s_S)
//============================================================================


struct  L_BFu9s_Uc  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 L_BFu9s_Uc) C1{ FL Fs:9 Fc}



static void Test_L_BFu9s_Uc()
{
  {
    init_simple_test("L_BFu9s_Uc");
    static STRUCT_IF_C L_BFu9s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Uc.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Uc");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Uc");
    check_field_offset(lv, v3, 10, "L_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Uc, L_BFu9s_Uc)
//============================================================================


struct  L_BFu9s_Ui  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 L_BFu9s_Ui) C1{ FL Fs:9 Fi}



static void Test_L_BFu9s_Ui()
{
  {
    init_simple_test("L_BFu9s_Ui");
    static STRUCT_IF_C L_BFu9s_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu9s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Ui.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Ui");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Ui");
    check_field_offset(lv, v3, 12, "L_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Ui, L_BFu9s_Ui)
//============================================================================


struct  L_BFu9s_Ul  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 L_BFu9s_Ul) C1{ FL Fs:9 FL}



static void Test_L_BFu9s_Ul()
{
  {
    init_simple_test("L_BFu9s_Ul");
    static STRUCT_IF_C L_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Ul.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Ul");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Ul, L_BFu9s_Ul)
//============================================================================


struct  L_BFu9s_Us  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 L_BFu9s_Us) C1{ FL Fs:9 Fs}



static void Test_L_BFu9s_Us()
{
  {
    init_simple_test("L_BFu9s_Us");
    static STRUCT_IF_C L_BFu9s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Us.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Us");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Us");
    check_field_offset(lv, v3, 10, "L_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Us, L_BFu9s_Us)
//============================================================================


struct  L_BFu9s_Vp  {
  __tsi64 v1;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 L_BFu9s_Vp) C1{ FL Fs:9 Fp}



static void Test_L_BFu9s_Vp()
{
  {
    init_simple_test("L_BFu9s_Vp");
    static STRUCT_IF_C L_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu9s_Vp.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_Vp");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu9s_Vp, L_BFu9s_Vp)
//============================================================================


struct  L_C  {
  __tsi64 v1;
  char v2;
};
//SIG(1 L_C) C1{ FL Fc}



static void Test_L_C()
{
  {
    init_simple_test("L_C");
    STRUCT_IF_C L_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C)");
    check_field_offset(lv, v1, 0, "L_C.v1");
    check_field_offset(lv, v2, 8, "L_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C, L_C)
//============================================================================


struct  L_C_BFu15i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:15;
};
//SIG(1 L_C_BFu15i) C1{ FL Fc Fi:15}



static void Test_L_C_BFu15i()
{
  {
    init_simple_test("L_C_BFu15i");
    static STRUCT_IF_C L_C_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu15i)");
    check_field_offset(lv, v1, 0, "L_C_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_C_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu15i, L_C_BFu15i)
//============================================================================


struct  L_C_BFu15ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 L_C_BFu15ll) C1{ FL Fc FL:15}



static void Test_L_C_BFu15ll()
{
  {
    init_simple_test("L_C_BFu15ll");
    static STRUCT_IF_C L_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_C_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu15ll, L_C_BFu15ll)
//============================================================================


struct  L_C_BFu15s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:15;
};
//SIG(1 L_C_BFu15s) C1{ FL Fc Fs:15}



static void Test_L_C_BFu15s()
{
  {
    init_simple_test("L_C_BFu15s");
    static STRUCT_IF_C L_C_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu15s)");
    check_field_offset(lv, v1, 0, "L_C_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_C_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu15s, L_C_BFu15s)
//============================================================================


struct  L_C_BFu16i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:16;
};
//SIG(1 L_C_BFu16i) C1{ FL Fc Fi:16}



static void Test_L_C_BFu16i()
{
  {
    init_simple_test("L_C_BFu16i");
    static STRUCT_IF_C L_C_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu16i)");
    check_field_offset(lv, v1, 0, "L_C_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_C_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu16i, L_C_BFu16i)
//============================================================================


struct  L_C_BFu16ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 L_C_BFu16ll) C1{ FL Fc FL:16}



static void Test_L_C_BFu16ll()
{
  {
    init_simple_test("L_C_BFu16ll");
    static STRUCT_IF_C L_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_C_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu16ll, L_C_BFu16ll)
//============================================================================


struct  L_C_BFu16s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:16;
};
//SIG(1 L_C_BFu16s) C1{ FL Fc Fs:16}



static void Test_L_C_BFu16s()
{
  {
    init_simple_test("L_C_BFu16s");
    static STRUCT_IF_C L_C_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu16s)");
    check_field_offset(lv, v1, 0, "L_C_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_C_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu16s, L_C_BFu16s)
//============================================================================


struct  L_C_BFu17i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:17;
};
//SIG(1 L_C_BFu17i) C1{ FL Fc Fi:17}



static void Test_L_C_BFu17i()
{
  {
    init_simple_test("L_C_BFu17i");
    static STRUCT_IF_C L_C_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu17i)");
    check_field_offset(lv, v1, 0, "L_C_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_C_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu17i, L_C_BFu17i)
//============================================================================


struct  L_C_BFu17ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 L_C_BFu17ll) C1{ FL Fc FL:17}



static void Test_L_C_BFu17ll()
{
  {
    init_simple_test("L_C_BFu17ll");
    static STRUCT_IF_C L_C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_C_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu17ll, L_C_BFu17ll)
//============================================================================


struct  L_C_BFu1c  {
  __tsi64 v1;
  char v2;
  unsigned char v3:1;
};
//SIG(1 L_C_BFu1c) C1{ FL Fc Fc:1}



static void Test_L_C_BFu1c()
{
  {
    init_simple_test("L_C_BFu1c");
    static STRUCT_IF_C L_C_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu1c)");
    check_field_offset(lv, v1, 0, "L_C_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu1c, L_C_BFu1c)
//============================================================================


struct  L_C_BFu1i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:1;
};
//SIG(1 L_C_BFu1i) C1{ FL Fc Fi:1}



static void Test_L_C_BFu1i()
{
  {
    init_simple_test("L_C_BFu1i");
    static STRUCT_IF_C L_C_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu1i)");
    check_field_offset(lv, v1, 0, "L_C_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu1i, L_C_BFu1i)
//============================================================================


struct  L_C_BFu1ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 L_C_BFu1ll) C1{ FL Fc FL:1}



static void Test_L_C_BFu1ll()
{
  {
    init_simple_test("L_C_BFu1ll");
    static STRUCT_IF_C L_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu1ll, L_C_BFu1ll)
//============================================================================


struct  L_C_BFu1s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:1;
};
//SIG(1 L_C_BFu1s) C1{ FL Fc Fs:1}



static void Test_L_C_BFu1s()
{
  {
    init_simple_test("L_C_BFu1s");
    static STRUCT_IF_C L_C_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu1s)");
    check_field_offset(lv, v1, 0, "L_C_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu1s, L_C_BFu1s)
//============================================================================


struct  L_C_BFu31i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:31;
};
//SIG(1 L_C_BFu31i) C1{ FL Fc Fi:31}



static void Test_L_C_BFu31i()
{
  {
    init_simple_test("L_C_BFu31i");
    static STRUCT_IF_C L_C_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_C_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu31i)");
    check_field_offset(lv, v1, 0, "L_C_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_C_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu31i, L_C_BFu31i)
//============================================================================


struct  L_C_BFu31ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 L_C_BFu31ll) C1{ FL Fc FL:31}



static void Test_L_C_BFu31ll()
{
  {
    init_simple_test("L_C_BFu31ll");
    static STRUCT_IF_C L_C_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_C_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu31ll, L_C_BFu31ll)
//============================================================================


struct  L_C_BFu32i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:32;
};
//SIG(1 L_C_BFu32i) C1{ FL Fc Fi:32}



static void Test_L_C_BFu32i()
{
  {
    init_simple_test("L_C_BFu32i");
    static STRUCT_IF_C L_C_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_C_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu32i)");
    check_field_offset(lv, v1, 0, "L_C_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_C_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu32i, L_C_BFu32i)
//============================================================================


struct  L_C_BFu32ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 L_C_BFu32ll) C1{ FL Fc FL:32}



static void Test_L_C_BFu32ll()
{
  {
    init_simple_test("L_C_BFu32ll");
    static STRUCT_IF_C L_C_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_C_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu32ll, L_C_BFu32ll)
//============================================================================


struct  L_C_BFu33  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 L_C_BFu33) C1{ FL Fc FL:33}



static void Test_L_C_BFu33()
{
  {
    init_simple_test("L_C_BFu33");
    static STRUCT_IF_C L_C_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu33)");
    check_field_offset(lv, v1, 0, "L_C_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu33.v2");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_C_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu33, L_C_BFu33)
//============================================================================


struct  L_C_BFu7c  {
  __tsi64 v1;
  char v2;
  unsigned char v3:7;
};
//SIG(1 L_C_BFu7c) C1{ FL Fc Fc:7}



static void Test_L_C_BFu7c()
{
  {
    init_simple_test("L_C_BFu7c");
    static STRUCT_IF_C L_C_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu7c)");
    check_field_offset(lv, v1, 0, "L_C_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_C_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu7c, L_C_BFu7c)
//============================================================================


struct  L_C_BFu7i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:7;
};
//SIG(1 L_C_BFu7i) C1{ FL Fc Fi:7}



static void Test_L_C_BFu7i()
{
  {
    init_simple_test("L_C_BFu7i");
    static STRUCT_IF_C L_C_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu7i)");
    check_field_offset(lv, v1, 0, "L_C_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_C_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu7i, L_C_BFu7i)
//============================================================================


struct  L_C_BFu7ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 L_C_BFu7ll) C1{ FL Fc FL:7}



static void Test_L_C_BFu7ll()
{
  {
    init_simple_test("L_C_BFu7ll");
    static STRUCT_IF_C L_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_C_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu7ll, L_C_BFu7ll)
//============================================================================


struct  L_C_BFu7s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:7;
};
//SIG(1 L_C_BFu7s) C1{ FL Fc Fs:7}



static void Test_L_C_BFu7s()
{
  {
    init_simple_test("L_C_BFu7s");
    static STRUCT_IF_C L_C_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu7s)");
    check_field_offset(lv, v1, 0, "L_C_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_C_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu7s, L_C_BFu7s)
//============================================================================


struct  L_C_BFu8c  {
  __tsi64 v1;
  char v2;
  unsigned char v3:8;
};
//SIG(1 L_C_BFu8c) C1{ FL Fc Fc:8}



static void Test_L_C_BFu8c()
{
  {
    init_simple_test("L_C_BFu8c");
    static STRUCT_IF_C L_C_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu8c)");
    check_field_offset(lv, v1, 0, "L_C_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_C_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu8c, L_C_BFu8c)
//============================================================================


struct  L_C_BFu8i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:8;
};
//SIG(1 L_C_BFu8i) C1{ FL Fc Fi:8}



static void Test_L_C_BFu8i()
{
  {
    init_simple_test("L_C_BFu8i");
    static STRUCT_IF_C L_C_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu8i)");
    check_field_offset(lv, v1, 0, "L_C_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_C_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu8i, L_C_BFu8i)
//============================================================================


struct  L_C_BFu8ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 L_C_BFu8ll) C1{ FL Fc FL:8}



static void Test_L_C_BFu8ll()
{
  {
    init_simple_test("L_C_BFu8ll");
    static STRUCT_IF_C L_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_C_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu8ll, L_C_BFu8ll)
//============================================================================


struct  L_C_BFu8s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:8;
};
//SIG(1 L_C_BFu8s) C1{ FL Fc Fs:8}



static void Test_L_C_BFu8s()
{
  {
    init_simple_test("L_C_BFu8s");
    static STRUCT_IF_C L_C_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu8s)");
    check_field_offset(lv, v1, 0, "L_C_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_C_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu8s, L_C_BFu8s)
//============================================================================


struct  L_C_BFu9i  {
  __tsi64 v1;
  char v2;
  unsigned int v3:9;
};
//SIG(1 L_C_BFu9i) C1{ FL Fc Fi:9}



static void Test_L_C_BFu9i()
{
  {
    init_simple_test("L_C_BFu9i");
    static STRUCT_IF_C L_C_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu9i)");
    check_field_offset(lv, v1, 0, "L_C_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_C_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu9i, L_C_BFu9i)
//============================================================================


struct  L_C_BFu9ll  {
  __tsi64 v1;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 L_C_BFu9ll) C1{ FL Fc FL:9}



static void Test_L_C_BFu9ll()
{
  {
    init_simple_test("L_C_BFu9ll");
    static STRUCT_IF_C L_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_C_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu9ll, L_C_BFu9ll)
//============================================================================


struct  L_C_BFu9s  {
  __tsi64 v1;
  char v2;
  unsigned short v3:9;
};
//SIG(1 L_C_BFu9s) C1{ FL Fc Fs:9}



static void Test_L_C_BFu9s()
{
  {
    init_simple_test("L_C_BFu9s");
    static STRUCT_IF_C L_C_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu9s)");
    check_field_offset(lv, v1, 0, "L_C_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_C_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu9s, L_C_BFu9s)
//============================================================================


struct  L_C_C  {
  __tsi64 v1;
  char v2;
  char v3;
};
//SIG(1 L_C_C) C1{ FL Fc[2]}



static void Test_L_C_C()
{
  {
    init_simple_test("L_C_C");
    STRUCT_IF_C L_C_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_C)");
    check_field_offset(lv, v1, 0, "L_C_C.v1");
    check_field_offset(lv, v2, 8, "L_C_C.v2");
    check_field_offset(lv, v3, 9, "L_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_C, L_C_C)
//============================================================================


struct  L_C_D  {
  __tsi64 v1;
  char v2;
  double v3;
};
//SIG(1 L_C_D) C1{ FL Fc FL}



static void Test_L_C_D()
{
  {
    init_simple_test("L_C_D");
    STRUCT_IF_C L_C_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_D)");
    check_field_offset(lv, v1, 0, "L_C_D.v1");
    check_field_offset(lv, v2, 8, "L_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_D, L_C_D)
//============================================================================


struct  L_C_F  {
  __tsi64 v1;
  char v2;
  float v3;
};
//SIG(1 L_C_F) C1{ FL Fc Fi}



static void Test_L_C_F()
{
  {
    init_simple_test("L_C_F");
    STRUCT_IF_C L_C_F lv;
    check2(sizeof(lv), 16, "sizeof(L_C_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_F)");
    check_field_offset(lv, v1, 0, "L_C_F.v1");
    check_field_offset(lv, v2, 8, "L_C_F.v2");
    check_field_offset(lv, v3, 12, "L_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_F, L_C_F)
//============================================================================


struct  L_C_I  {
  __tsi64 v1;
  char v2;
  int v3;
};
//SIG(1 L_C_I) C1{ FL Fc Fi}



static void Test_L_C_I()
{
  {
    init_simple_test("L_C_I");
    STRUCT_IF_C L_C_I lv;
    check2(sizeof(lv), 16, "sizeof(L_C_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_I)");
    check_field_offset(lv, v1, 0, "L_C_I.v1");
    check_field_offset(lv, v2, 8, "L_C_I.v2");
    check_field_offset(lv, v3, 12, "L_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_I, L_C_I)
//============================================================================


struct  L_C_Ip  {
  __tsi64 v1;
  char v2;
  int *v3;
};
//SIG(1 L_C_Ip) C1{ FL Fc Fp}



static void Test_L_C_Ip()
{
  {
    init_simple_test("L_C_Ip");
    STRUCT_IF_C L_C_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Ip)");
    check_field_offset(lv, v1, 0, "L_C_Ip.v1");
    check_field_offset(lv, v2, 8, "L_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Ip, L_C_Ip)
//============================================================================


struct  L_C_L  {
  __tsi64 v1;
  char v2;
  __tsi64 v3;
};
//SIG(1 L_C_L) C1{ FL Fc FL}



static void Test_L_C_L()
{
  {
    init_simple_test("L_C_L");
    STRUCT_IF_C L_C_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_L)");
    check_field_offset(lv, v1, 0, "L_C_L.v1");
    check_field_offset(lv, v2, 8, "L_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_L, L_C_L)
//============================================================================


struct  L_C_S  {
  __tsi64 v1;
  char v2;
  short v3;
};
//SIG(1 L_C_S) C1{ FL Fc Fs}



static void Test_L_C_S()
{
  {
    init_simple_test("L_C_S");
    STRUCT_IF_C L_C_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_S)");
    check_field_offset(lv, v1, 0, "L_C_S.v1");
    check_field_offset(lv, v2, 8, "L_C_S.v2");
    check_field_offset(lv, v3, 10, "L_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_S, L_C_S)
//============================================================================


struct  L_C_Uc  {
  __tsi64 v1;
  char v2;
  unsigned char v3;
};
//SIG(1 L_C_Uc) C1{ FL Fc[2]}



static void Test_L_C_Uc()
{
  {
    init_simple_test("L_C_Uc");
    STRUCT_IF_C L_C_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Uc)");
    check_field_offset(lv, v1, 0, "L_C_Uc.v1");
    check_field_offset(lv, v2, 8, "L_C_Uc.v2");
    check_field_offset(lv, v3, 9, "L_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Uc, L_C_Uc)
//============================================================================


struct  L_C_Ui  {
  __tsi64 v1;
  char v2;
  unsigned int v3;
};
//SIG(1 L_C_Ui) C1{ FL Fc Fi}



static void Test_L_C_Ui()
{
  {
    init_simple_test("L_C_Ui");
    STRUCT_IF_C L_C_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_C_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Ui)");
    check_field_offset(lv, v1, 0, "L_C_Ui.v1");
    check_field_offset(lv, v2, 8, "L_C_Ui.v2");
    check_field_offset(lv, v3, 12, "L_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Ui, L_C_Ui)
//============================================================================


struct  L_C_Ul  {
  __tsi64 v1;
  char v2;
  __tsu64 v3;
};
//SIG(1 L_C_Ul) C1{ FL Fc FL}



static void Test_L_C_Ul()
{
  {
    init_simple_test("L_C_Ul");
    STRUCT_IF_C L_C_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Ul)");
    check_field_offset(lv, v1, 0, "L_C_Ul.v1");
    check_field_offset(lv, v2, 8, "L_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Ul, L_C_Ul)
//============================================================================


struct  L_C_Us  {
  __tsi64 v1;
  char v2;
  unsigned short v3;
};
//SIG(1 L_C_Us) C1{ FL Fc Fs}



static void Test_L_C_Us()
{
  {
    init_simple_test("L_C_Us");
    STRUCT_IF_C L_C_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Us)");
    check_field_offset(lv, v1, 0, "L_C_Us.v1");
    check_field_offset(lv, v2, 8, "L_C_Us.v2");
    check_field_offset(lv, v3, 10, "L_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Us, L_C_Us)
//============================================================================


struct  L_C_Vp  {
  __tsi64 v1;
  char v2;
  void *v3;
};
//SIG(1 L_C_Vp) C1{ FL Fc Fp}



static void Test_L_C_Vp()
{
  {
    init_simple_test("L_C_Vp");
    STRUCT_IF_C L_C_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_Vp)");
    check_field_offset(lv, v1, 0, "L_C_Vp.v1");
    check_field_offset(lv, v2, 8, "L_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_Vp, L_C_Vp)
//============================================================================


struct  L_D  {
  __tsi64 v1;
  double v2;
};
//SIG(1 L_D) C1{ FL[2]}



static void Test_L_D()
{
  {
    init_simple_test("L_D");
    STRUCT_IF_C L_D lv;
    check2(sizeof(lv), 16, "sizeof(L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D)");
    check_field_offset(lv, v1, 0, "L_D.v1");
    check_field_offset(lv, v2, 8, "L_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D, L_D)
//============================================================================


struct  L_D_BFu15i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:15;
};
//SIG(1 L_D_BFu15i) C1{ FL[2] Fi:15}



static void Test_L_D_BFu15i()
{
  {
    init_simple_test("L_D_BFu15i");
    static STRUCT_IF_C L_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu15i)");
    check_field_offset(lv, v1, 0, "L_D_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu15i.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_D_BFu15i");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu15i, L_D_BFu15i)
//============================================================================


struct  L_D_BFu15ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 L_D_BFu15ll) C1{ FL[2] FL:15}



static void Test_L_D_BFu15ll()
{
  {
    init_simple_test("L_D_BFu15ll");
    static STRUCT_IF_C L_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_D_BFu15ll");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu15ll, L_D_BFu15ll)
//============================================================================


struct  L_D_BFu15s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:15;
};
//SIG(1 L_D_BFu15s) C1{ FL[2] Fs:15}



static void Test_L_D_BFu15s()
{
  {
    init_simple_test("L_D_BFu15s");
    static STRUCT_IF_C L_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu15s)");
    check_field_offset(lv, v1, 0, "L_D_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu15s.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_D_BFu15s");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu15s, L_D_BFu15s)
//============================================================================


struct  L_D_BFu16i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:16;
};
//SIG(1 L_D_BFu16i) C1{ FL[2] Fi:16}



static void Test_L_D_BFu16i()
{
  {
    init_simple_test("L_D_BFu16i");
    static STRUCT_IF_C L_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu16i)");
    check_field_offset(lv, v1, 0, "L_D_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu16i.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_D_BFu16i");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu16i, L_D_BFu16i)
//============================================================================


struct  L_D_BFu16ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 L_D_BFu16ll) C1{ FL[2] FL:16}



static void Test_L_D_BFu16ll()
{
  {
    init_simple_test("L_D_BFu16ll");
    static STRUCT_IF_C L_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_D_BFu16ll");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu16ll, L_D_BFu16ll)
//============================================================================


struct  L_D_BFu16s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:16;
};
//SIG(1 L_D_BFu16s) C1{ FL[2] Fs:16}



static void Test_L_D_BFu16s()
{
  {
    init_simple_test("L_D_BFu16s");
    static STRUCT_IF_C L_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu16s)");
    check_field_offset(lv, v1, 0, "L_D_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu16s.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_D_BFu16s");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu16s, L_D_BFu16s)
//============================================================================


struct  L_D_BFu17i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:17;
};
//SIG(1 L_D_BFu17i) C1{ FL[2] Fi:17}



static void Test_L_D_BFu17i()
{
  {
    init_simple_test("L_D_BFu17i");
    static STRUCT_IF_C L_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu17i)");
    check_field_offset(lv, v1, 0, "L_D_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu17i.v2");
    set_bf_and_test(lv, v3, 16, 0, 17, 1, "L_D_BFu17i");
    set_bf_and_test(lv, v3, 16, 0, 17, hide_ull(1LL<<16), "L_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu17i, L_D_BFu17i)
//============================================================================


struct  L_D_BFu17ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 L_D_BFu17ll) C1{ FL[2] FL:17}



static void Test_L_D_BFu17ll()
{
  {
    init_simple_test("L_D_BFu17ll");
    static STRUCT_IF_C L_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 17, 1, "L_D_BFu17ll");
    set_bf_and_test(lv, v3, 16, 0, 17, hide_ull(1LL<<16), "L_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu17ll, L_D_BFu17ll)
//============================================================================


struct  L_D_BFu1c  {
  __tsi64 v1;
  double v2;
  unsigned char v3:1;
};
//SIG(1 L_D_BFu1c) C1{ FL[2] Fc:1}



static void Test_L_D_BFu1c()
{
  {
    init_simple_test("L_D_BFu1c");
    static STRUCT_IF_C L_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu1c)");
    check_field_offset(lv, v1, 0, "L_D_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu1c.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu1c, L_D_BFu1c)
//============================================================================


struct  L_D_BFu1i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:1;
};
//SIG(1 L_D_BFu1i) C1{ FL[2] Fi:1}



static void Test_L_D_BFu1i()
{
  {
    init_simple_test("L_D_BFu1i");
    static STRUCT_IF_C L_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu1i)");
    check_field_offset(lv, v1, 0, "L_D_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu1i.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu1i, L_D_BFu1i)
//============================================================================


struct  L_D_BFu1ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 L_D_BFu1ll) C1{ FL[2] FL:1}



static void Test_L_D_BFu1ll()
{
  {
    init_simple_test("L_D_BFu1ll");
    static STRUCT_IF_C L_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu1ll, L_D_BFu1ll)
//============================================================================


struct  L_D_BFu1s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:1;
};
//SIG(1 L_D_BFu1s) C1{ FL[2] Fs:1}



static void Test_L_D_BFu1s()
{
  {
    init_simple_test("L_D_BFu1s");
    static STRUCT_IF_C L_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu1s)");
    check_field_offset(lv, v1, 0, "L_D_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu1s.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu1s, L_D_BFu1s)
//============================================================================


struct  L_D_BFu31i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:31;
};
//SIG(1 L_D_BFu31i) C1{ FL[2] Fi:31}



static void Test_L_D_BFu31i()
{
  {
    init_simple_test("L_D_BFu31i");
    static STRUCT_IF_C L_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu31i)");
    check_field_offset(lv, v1, 0, "L_D_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu31i.v2");
    set_bf_and_test(lv, v3, 16, 0, 31, 1, "L_D_BFu31i");
    set_bf_and_test(lv, v3, 16, 0, 31, hide_ull(1LL<<30), "L_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu31i, L_D_BFu31i)
//============================================================================


struct  L_D_BFu31ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 L_D_BFu31ll) C1{ FL[2] FL:31}



static void Test_L_D_BFu31ll()
{
  {
    init_simple_test("L_D_BFu31ll");
    static STRUCT_IF_C L_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 31, 1, "L_D_BFu31ll");
    set_bf_and_test(lv, v3, 16, 0, 31, hide_ull(1LL<<30), "L_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu31ll, L_D_BFu31ll)
//============================================================================


struct  L_D_BFu32i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:32;
};
//SIG(1 L_D_BFu32i) C1{ FL[2] Fi:32}



static void Test_L_D_BFu32i()
{
  {
    init_simple_test("L_D_BFu32i");
    static STRUCT_IF_C L_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu32i)");
    check_field_offset(lv, v1, 0, "L_D_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu32i.v2");
    set_bf_and_test(lv, v3, 16, 0, 32, 1, "L_D_BFu32i");
    set_bf_and_test(lv, v3, 16, 0, 32, hide_ull(1LL<<31), "L_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu32i, L_D_BFu32i)
//============================================================================


struct  L_D_BFu32ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 L_D_BFu32ll) C1{ FL[2] FL:32}



static void Test_L_D_BFu32ll()
{
  {
    init_simple_test("L_D_BFu32ll");
    static STRUCT_IF_C L_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 32, 1, "L_D_BFu32ll");
    set_bf_and_test(lv, v3, 16, 0, 32, hide_ull(1LL<<31), "L_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu32ll, L_D_BFu32ll)
//============================================================================


struct  L_D_BFu33  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 L_D_BFu33) C1{ FL[2] FL:33}



static void Test_L_D_BFu33()
{
  {
    init_simple_test("L_D_BFu33");
    static STRUCT_IF_C L_D_BFu33 lv;
    check2(sizeof(lv), 24, "sizeof(L_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu33)");
    check_field_offset(lv, v1, 0, "L_D_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu33.v2");
    set_bf_and_test(lv, v3, 16, 0, 33, 1, "L_D_BFu33");
    set_bf_and_test(lv, v3, 16, 0, 33, hide_ull(1LL<<32), "L_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu33, L_D_BFu33)
//============================================================================


struct  L_D_BFu7c  {
  __tsi64 v1;
  double v2;
  unsigned char v3:7;
};
//SIG(1 L_D_BFu7c) C1{ FL[2] Fc:7}



static void Test_L_D_BFu7c()
{
  {
    init_simple_test("L_D_BFu7c");
    static STRUCT_IF_C L_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu7c)");
    check_field_offset(lv, v1, 0, "L_D_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu7c.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_D_BFu7c");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu7c, L_D_BFu7c)
//============================================================================


struct  L_D_BFu7i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:7;
};
//SIG(1 L_D_BFu7i) C1{ FL[2] Fi:7}



static void Test_L_D_BFu7i()
{
  {
    init_simple_test("L_D_BFu7i");
    static STRUCT_IF_C L_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu7i)");
    check_field_offset(lv, v1, 0, "L_D_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu7i.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_D_BFu7i");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu7i, L_D_BFu7i)
//============================================================================


struct  L_D_BFu7ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 L_D_BFu7ll) C1{ FL[2] FL:7}



static void Test_L_D_BFu7ll()
{
  {
    init_simple_test("L_D_BFu7ll");
    static STRUCT_IF_C L_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_D_BFu7ll");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu7ll, L_D_BFu7ll)
//============================================================================


struct  L_D_BFu7s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:7;
};
//SIG(1 L_D_BFu7s) C1{ FL[2] Fs:7}



static void Test_L_D_BFu7s()
{
  {
    init_simple_test("L_D_BFu7s");
    static STRUCT_IF_C L_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu7s)");
    check_field_offset(lv, v1, 0, "L_D_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu7s.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_D_BFu7s");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu7s, L_D_BFu7s)
//============================================================================


struct  L_D_BFu8c  {
  __tsi64 v1;
  double v2;
  unsigned char v3:8;
};
//SIG(1 L_D_BFu8c) C1{ FL[2] Fc:8}



static void Test_L_D_BFu8c()
{
  {
    init_simple_test("L_D_BFu8c");
    static STRUCT_IF_C L_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu8c)");
    check_field_offset(lv, v1, 0, "L_D_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu8c.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_D_BFu8c");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu8c, L_D_BFu8c)
//============================================================================


struct  L_D_BFu8i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:8;
};
//SIG(1 L_D_BFu8i) C1{ FL[2] Fi:8}



static void Test_L_D_BFu8i()
{
  {
    init_simple_test("L_D_BFu8i");
    static STRUCT_IF_C L_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu8i)");
    check_field_offset(lv, v1, 0, "L_D_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu8i.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_D_BFu8i");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu8i, L_D_BFu8i)
//============================================================================


struct  L_D_BFu8ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 L_D_BFu8ll) C1{ FL[2] FL:8}



static void Test_L_D_BFu8ll()
{
  {
    init_simple_test("L_D_BFu8ll");
    static STRUCT_IF_C L_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_D_BFu8ll");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu8ll, L_D_BFu8ll)
//============================================================================


struct  L_D_BFu8s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:8;
};
//SIG(1 L_D_BFu8s) C1{ FL[2] Fs:8}



static void Test_L_D_BFu8s()
{
  {
    init_simple_test("L_D_BFu8s");
    static STRUCT_IF_C L_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu8s)");
    check_field_offset(lv, v1, 0, "L_D_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu8s.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_D_BFu8s");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu8s, L_D_BFu8s)
//============================================================================


struct  L_D_BFu9i  {
  __tsi64 v1;
  double v2;
  unsigned int v3:9;
};
//SIG(1 L_D_BFu9i) C1{ FL[2] Fi:9}



static void Test_L_D_BFu9i()
{
  {
    init_simple_test("L_D_BFu9i");
    static STRUCT_IF_C L_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu9i)");
    check_field_offset(lv, v1, 0, "L_D_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu9i.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_D_BFu9i");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu9i, L_D_BFu9i)
//============================================================================


struct  L_D_BFu9ll  {
  __tsi64 v1;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 L_D_BFu9ll) C1{ FL[2] FL:9}



static void Test_L_D_BFu9ll()
{
  {
    init_simple_test("L_D_BFu9ll");
    static STRUCT_IF_C L_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_D_BFu9ll");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu9ll, L_D_BFu9ll)
//============================================================================


struct  L_D_BFu9s  {
  __tsi64 v1;
  double v2;
  unsigned short v3:9;
};
//SIG(1 L_D_BFu9s) C1{ FL[2] Fs:9}



static void Test_L_D_BFu9s()
{
  {
    init_simple_test("L_D_BFu9s");
    static STRUCT_IF_C L_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu9s)");
    check_field_offset(lv, v1, 0, "L_D_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu9s.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_D_BFu9s");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu9s, L_D_BFu9s)
//============================================================================


struct  L_D_C  {
  __tsi64 v1;
  double v2;
  char v3;
};
//SIG(1 L_D_C) C1{ FL[2] Fc}



static void Test_L_D_C()
{
  {
    init_simple_test("L_D_C");
    STRUCT_IF_C L_D_C lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_C)");
    check_field_offset(lv, v1, 0, "L_D_C.v1");
    check_field_offset(lv, v2, 8, "L_D_C.v2");
    check_field_offset(lv, v3, 16, "L_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_C, L_D_C)
//============================================================================


struct  L_D_D  {
  __tsi64 v1;
  double v2;
  double v3;
};
//SIG(1 L_D_D) C1{ FL[3]}



static void Test_L_D_D()
{
  {
    init_simple_test("L_D_D");
    STRUCT_IF_C L_D_D lv;
    check2(sizeof(lv), 24, "sizeof(L_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_D)");
    check_field_offset(lv, v1, 0, "L_D_D.v1");
    check_field_offset(lv, v2, 8, "L_D_D.v2");
    check_field_offset(lv, v3, 16, "L_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_D, L_D_D)
//============================================================================


struct  L_D_F  {
  __tsi64 v1;
  double v2;
  float v3;
};
//SIG(1 L_D_F) C1{ FL[2] Fi}



static void Test_L_D_F()
{
  {
    init_simple_test("L_D_F");
    STRUCT_IF_C L_D_F lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_F)");
    check_field_offset(lv, v1, 0, "L_D_F.v1");
    check_field_offset(lv, v2, 8, "L_D_F.v2");
    check_field_offset(lv, v3, 16, "L_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_F, L_D_F)
//============================================================================


struct  L_D_I  {
  __tsi64 v1;
  double v2;
  int v3;
};
//SIG(1 L_D_I) C1{ FL[2] Fi}



static void Test_L_D_I()
{
  {
    init_simple_test("L_D_I");
    STRUCT_IF_C L_D_I lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_I)");
    check_field_offset(lv, v1, 0, "L_D_I.v1");
    check_field_offset(lv, v2, 8, "L_D_I.v2");
    check_field_offset(lv, v3, 16, "L_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_I, L_D_I)
//============================================================================


struct  L_D_Ip  {
  __tsi64 v1;
  double v2;
  int *v3;
};
//SIG(1 L_D_Ip) C1{ FL[2] Fp}



static void Test_L_D_Ip()
{
  {
    init_simple_test("L_D_Ip");
    STRUCT_IF_C L_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Ip)");
    check_field_offset(lv, v1, 0, "L_D_Ip.v1");
    check_field_offset(lv, v2, 8, "L_D_Ip.v2");
    check_field_offset(lv, v3, 16, "L_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Ip, L_D_Ip)
//============================================================================


struct  L_D_L  {
  __tsi64 v1;
  double v2;
  __tsi64 v3;
};
//SIG(1 L_D_L) C1{ FL[3]}



static void Test_L_D_L()
{
  {
    init_simple_test("L_D_L");
    STRUCT_IF_C L_D_L lv;
    check2(sizeof(lv), 24, "sizeof(L_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_L)");
    check_field_offset(lv, v1, 0, "L_D_L.v1");
    check_field_offset(lv, v2, 8, "L_D_L.v2");
    check_field_offset(lv, v3, 16, "L_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_L, L_D_L)
//============================================================================


struct  L_D_S  {
  __tsi64 v1;
  double v2;
  short v3;
};
//SIG(1 L_D_S) C1{ FL[2] Fs}



static void Test_L_D_S()
{
  {
    init_simple_test("L_D_S");
    STRUCT_IF_C L_D_S lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_S)");
    check_field_offset(lv, v1, 0, "L_D_S.v1");
    check_field_offset(lv, v2, 8, "L_D_S.v2");
    check_field_offset(lv, v3, 16, "L_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_S, L_D_S)
//============================================================================


struct  L_D_Uc  {
  __tsi64 v1;
  double v2;
  unsigned char v3;
};
//SIG(1 L_D_Uc) C1{ FL[2] Fc}



static void Test_L_D_Uc()
{
  {
    init_simple_test("L_D_Uc");
    STRUCT_IF_C L_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Uc)");
    check_field_offset(lv, v1, 0, "L_D_Uc.v1");
    check_field_offset(lv, v2, 8, "L_D_Uc.v2");
    check_field_offset(lv, v3, 16, "L_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Uc, L_D_Uc)
//============================================================================


struct  L_D_Ui  {
  __tsi64 v1;
  double v2;
  unsigned int v3;
};
//SIG(1 L_D_Ui) C1{ FL[2] Fi}



static void Test_L_D_Ui()
{
  {
    init_simple_test("L_D_Ui");
    STRUCT_IF_C L_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Ui)");
    check_field_offset(lv, v1, 0, "L_D_Ui.v1");
    check_field_offset(lv, v2, 8, "L_D_Ui.v2");
    check_field_offset(lv, v3, 16, "L_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Ui, L_D_Ui)
//============================================================================


struct  L_D_Ul  {
  __tsi64 v1;
  double v2;
  __tsu64 v3;
};
//SIG(1 L_D_Ul) C1{ FL[3]}



static void Test_L_D_Ul()
{
  {
    init_simple_test("L_D_Ul");
    STRUCT_IF_C L_D_Ul lv;
    check2(sizeof(lv), 24, "sizeof(L_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Ul)");
    check_field_offset(lv, v1, 0, "L_D_Ul.v1");
    check_field_offset(lv, v2, 8, "L_D_Ul.v2");
    check_field_offset(lv, v3, 16, "L_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Ul, L_D_Ul)
//============================================================================


struct  L_D_Us  {
  __tsi64 v1;
  double v2;
  unsigned short v3;
};
//SIG(1 L_D_Us) C1{ FL[2] Fs}



static void Test_L_D_Us()
{
  {
    init_simple_test("L_D_Us");
    STRUCT_IF_C L_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Us)");
    check_field_offset(lv, v1, 0, "L_D_Us.v1");
    check_field_offset(lv, v2, 8, "L_D_Us.v2");
    check_field_offset(lv, v3, 16, "L_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Us, L_D_Us)
//============================================================================


struct  L_D_Vp  {
  __tsi64 v1;
  double v2;
  void *v3;
};
//SIG(1 L_D_Vp) C1{ FL[2] Fp}



static void Test_L_D_Vp()
{
  {
    init_simple_test("L_D_Vp");
    STRUCT_IF_C L_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_Vp)");
    check_field_offset(lv, v1, 0, "L_D_Vp.v1");
    check_field_offset(lv, v2, 8, "L_D_Vp.v2");
    check_field_offset(lv, v3, 16, "L_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_Vp, L_D_Vp)
//============================================================================


struct  L_F  {
  __tsi64 v1;
  float v2;
};
//SIG(1 L_F) C1{ FL Fi}



static void Test_L_F()
{
  {
    init_simple_test("L_F");
    STRUCT_IF_C L_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F)");
    check_field_offset(lv, v1, 0, "L_F.v1");
    check_field_offset(lv, v2, 8, "L_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F, L_F)
//============================================================================


struct  L_F_BFu15i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:15;
};
//SIG(1 L_F_BFu15i) C1{ FL Fi Fi:15}



static void Test_L_F_BFu15i()
{
  {
    init_simple_test("L_F_BFu15i");
    static STRUCT_IF_C L_F_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu15i)");
    check_field_offset(lv, v1, 0, "L_F_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_F_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu15i, L_F_BFu15i)
//============================================================================


struct  L_F_BFu15ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 L_F_BFu15ll) C1{ FL Fi FL:15}



static void Test_L_F_BFu15ll()
{
  {
    init_simple_test("L_F_BFu15ll");
    static STRUCT_IF_C L_F_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_F_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu15ll, L_F_BFu15ll)
//============================================================================


struct  L_F_BFu15s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:15;
};
//SIG(1 L_F_BFu15s) C1{ FL Fi Fs:15}



static void Test_L_F_BFu15s()
{
  {
    init_simple_test("L_F_BFu15s");
    static STRUCT_IF_C L_F_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu15s)");
    check_field_offset(lv, v1, 0, "L_F_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_F_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu15s, L_F_BFu15s)
//============================================================================


struct  L_F_BFu16i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:16;
};
//SIG(1 L_F_BFu16i) C1{ FL Fi Fi:16}



static void Test_L_F_BFu16i()
{
  {
    init_simple_test("L_F_BFu16i");
    static STRUCT_IF_C L_F_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu16i)");
    check_field_offset(lv, v1, 0, "L_F_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_F_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu16i, L_F_BFu16i)
//============================================================================


struct  L_F_BFu16ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 L_F_BFu16ll) C1{ FL Fi FL:16}



static void Test_L_F_BFu16ll()
{
  {
    init_simple_test("L_F_BFu16ll");
    static STRUCT_IF_C L_F_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_F_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu16ll, L_F_BFu16ll)
//============================================================================


struct  L_F_BFu16s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:16;
};
//SIG(1 L_F_BFu16s) C1{ FL Fi Fs:16}



static void Test_L_F_BFu16s()
{
  {
    init_simple_test("L_F_BFu16s");
    static STRUCT_IF_C L_F_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu16s)");
    check_field_offset(lv, v1, 0, "L_F_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_F_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu16s, L_F_BFu16s)
//============================================================================


struct  L_F_BFu17i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:17;
};
//SIG(1 L_F_BFu17i) C1{ FL Fi Fi:17}



static void Test_L_F_BFu17i()
{
  {
    init_simple_test("L_F_BFu17i");
    static STRUCT_IF_C L_F_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu17i)");
    check_field_offset(lv, v1, 0, "L_F_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_F_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu17i, L_F_BFu17i)
//============================================================================


struct  L_F_BFu17ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 L_F_BFu17ll) C1{ FL Fi FL:17}



static void Test_L_F_BFu17ll()
{
  {
    init_simple_test("L_F_BFu17ll");
    static STRUCT_IF_C L_F_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_F_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu17ll, L_F_BFu17ll)
//============================================================================


struct  L_F_BFu1c  {
  __tsi64 v1;
  float v2;
  unsigned char v3:1;
};
//SIG(1 L_F_BFu1c) C1{ FL Fi Fc:1}



static void Test_L_F_BFu1c()
{
  {
    init_simple_test("L_F_BFu1c");
    static STRUCT_IF_C L_F_BFu1c lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu1c)");
    check_field_offset(lv, v1, 0, "L_F_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu1c, L_F_BFu1c)
//============================================================================


struct  L_F_BFu1i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:1;
};
//SIG(1 L_F_BFu1i) C1{ FL Fi Fi:1}



static void Test_L_F_BFu1i()
{
  {
    init_simple_test("L_F_BFu1i");
    static STRUCT_IF_C L_F_BFu1i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu1i)");
    check_field_offset(lv, v1, 0, "L_F_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu1i, L_F_BFu1i)
//============================================================================


struct  L_F_BFu1ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 L_F_BFu1ll) C1{ FL Fi FL:1}



static void Test_L_F_BFu1ll()
{
  {
    init_simple_test("L_F_BFu1ll");
    static STRUCT_IF_C L_F_BFu1ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu1ll, L_F_BFu1ll)
//============================================================================


struct  L_F_BFu1s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:1;
};
//SIG(1 L_F_BFu1s) C1{ FL Fi Fs:1}



static void Test_L_F_BFu1s()
{
  {
    init_simple_test("L_F_BFu1s");
    static STRUCT_IF_C L_F_BFu1s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu1s)");
    check_field_offset(lv, v1, 0, "L_F_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu1s, L_F_BFu1s)
//============================================================================


struct  L_F_BFu31i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:31;
};
//SIG(1 L_F_BFu31i) C1{ FL Fi Fi:31}



static void Test_L_F_BFu31i()
{
  {
    init_simple_test("L_F_BFu31i");
    static STRUCT_IF_C L_F_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu31i)");
    check_field_offset(lv, v1, 0, "L_F_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_F_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu31i, L_F_BFu31i)
//============================================================================


struct  L_F_BFu31ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 L_F_BFu31ll) C1{ FL Fi FL:31}



static void Test_L_F_BFu31ll()
{
  {
    init_simple_test("L_F_BFu31ll");
    static STRUCT_IF_C L_F_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_F_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu31ll, L_F_BFu31ll)
//============================================================================


struct  L_F_BFu32i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:32;
};
//SIG(1 L_F_BFu32i) C1{ FL Fi Fi:32}



static void Test_L_F_BFu32i()
{
  {
    init_simple_test("L_F_BFu32i");
    static STRUCT_IF_C L_F_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu32i)");
    check_field_offset(lv, v1, 0, "L_F_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_F_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu32i, L_F_BFu32i)
//============================================================================


struct  L_F_BFu32ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 L_F_BFu32ll) C1{ FL Fi FL:32}



static void Test_L_F_BFu32ll()
{
  {
    init_simple_test("L_F_BFu32ll");
    static STRUCT_IF_C L_F_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_F_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu32ll, L_F_BFu32ll)
//============================================================================


struct  L_F_BFu33  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 L_F_BFu33) C1{ FL Fi FL:33}



static void Test_L_F_BFu33()
{
  {
    init_simple_test("L_F_BFu33");
    static STRUCT_IF_C L_F_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu33)");
    check_field_offset(lv, v1, 0, "L_F_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "L_F_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "L_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu33, L_F_BFu33)
//============================================================================


struct  L_F_BFu7c  {
  __tsi64 v1;
  float v2;
  unsigned char v3:7;
};
//SIG(1 L_F_BFu7c) C1{ FL Fi Fc:7}



static void Test_L_F_BFu7c()
{
  {
    init_simple_test("L_F_BFu7c");
    static STRUCT_IF_C L_F_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu7c)");
    check_field_offset(lv, v1, 0, "L_F_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_F_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu7c, L_F_BFu7c)
//============================================================================


struct  L_F_BFu7i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:7;
};
//SIG(1 L_F_BFu7i) C1{ FL Fi Fi:7}



static void Test_L_F_BFu7i()
{
  {
    init_simple_test("L_F_BFu7i");
    static STRUCT_IF_C L_F_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu7i)");
    check_field_offset(lv, v1, 0, "L_F_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_F_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu7i, L_F_BFu7i)
//============================================================================


struct  L_F_BFu7ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 L_F_BFu7ll) C1{ FL Fi FL:7}



static void Test_L_F_BFu7ll()
{
  {
    init_simple_test("L_F_BFu7ll");
    static STRUCT_IF_C L_F_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_F_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu7ll, L_F_BFu7ll)
//============================================================================


struct  L_F_BFu7s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:7;
};
//SIG(1 L_F_BFu7s) C1{ FL Fi Fs:7}



static void Test_L_F_BFu7s()
{
  {
    init_simple_test("L_F_BFu7s");
    static STRUCT_IF_C L_F_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu7s)");
    check_field_offset(lv, v1, 0, "L_F_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_F_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu7s, L_F_BFu7s)
//============================================================================


struct  L_F_BFu8c  {
  __tsi64 v1;
  float v2;
  unsigned char v3:8;
};
//SIG(1 L_F_BFu8c) C1{ FL Fi Fc:8}



static void Test_L_F_BFu8c()
{
  {
    init_simple_test("L_F_BFu8c");
    static STRUCT_IF_C L_F_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu8c)");
    check_field_offset(lv, v1, 0, "L_F_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_F_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu8c, L_F_BFu8c)
//============================================================================


struct  L_F_BFu8i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:8;
};
//SIG(1 L_F_BFu8i) C1{ FL Fi Fi:8}



static void Test_L_F_BFu8i()
{
  {
    init_simple_test("L_F_BFu8i");
    static STRUCT_IF_C L_F_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu8i)");
    check_field_offset(lv, v1, 0, "L_F_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_F_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu8i, L_F_BFu8i)
//============================================================================


struct  L_F_BFu8ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 L_F_BFu8ll) C1{ FL Fi FL:8}



static void Test_L_F_BFu8ll()
{
  {
    init_simple_test("L_F_BFu8ll");
    static STRUCT_IF_C L_F_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_F_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu8ll, L_F_BFu8ll)
//============================================================================


struct  L_F_BFu8s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:8;
};
//SIG(1 L_F_BFu8s) C1{ FL Fi Fs:8}



static void Test_L_F_BFu8s()
{
  {
    init_simple_test("L_F_BFu8s");
    static STRUCT_IF_C L_F_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu8s)");
    check_field_offset(lv, v1, 0, "L_F_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_F_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu8s, L_F_BFu8s)
//============================================================================


struct  L_F_BFu9i  {
  __tsi64 v1;
  float v2;
  unsigned int v3:9;
};
//SIG(1 L_F_BFu9i) C1{ FL Fi Fi:9}



static void Test_L_F_BFu9i()
{
  {
    init_simple_test("L_F_BFu9i");
    static STRUCT_IF_C L_F_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu9i)");
    check_field_offset(lv, v1, 0, "L_F_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_F_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu9i, L_F_BFu9i)
//============================================================================


struct  L_F_BFu9ll  {
  __tsi64 v1;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 L_F_BFu9ll) C1{ FL Fi FL:9}



static void Test_L_F_BFu9ll()
{
  {
    init_simple_test("L_F_BFu9ll");
    static STRUCT_IF_C L_F_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_F_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu9ll, L_F_BFu9ll)
//============================================================================


struct  L_F_BFu9s  {
  __tsi64 v1;
  float v2;
  unsigned short v3:9;
};
//SIG(1 L_F_BFu9s) C1{ FL Fi Fs:9}



static void Test_L_F_BFu9s()
{
  {
    init_simple_test("L_F_BFu9s");
    static STRUCT_IF_C L_F_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_F_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu9s)");
    check_field_offset(lv, v1, 0, "L_F_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_F_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu9s, L_F_BFu9s)
//============================================================================


struct  L_F_C  {
  __tsi64 v1;
  float v2;
  char v3;
};
//SIG(1 L_F_C) C1{ FL Fi Fc}



static void Test_L_F_C()
{
  {
    init_simple_test("L_F_C");
    STRUCT_IF_C L_F_C lv;
    check2(sizeof(lv), 16, "sizeof(L_F_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_C)");
    check_field_offset(lv, v1, 0, "L_F_C.v1");
    check_field_offset(lv, v2, 8, "L_F_C.v2");
    check_field_offset(lv, v3, 12, "L_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_C, L_F_C)
//============================================================================


struct  L_F_D  {
  __tsi64 v1;
  float v2;
  double v3;
};
//SIG(1 L_F_D) C1{ FL Fi FL}



static void Test_L_F_D()
{
  {
    init_simple_test("L_F_D");
    STRUCT_IF_C L_F_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_D)");
    check_field_offset(lv, v1, 0, "L_F_D.v1");
    check_field_offset(lv, v2, 8, "L_F_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_D, L_F_D)
//============================================================================


struct  L_F_F  {
  __tsi64 v1;
  float v2;
  float v3;
};
//SIG(1 L_F_F) C1{ FL Fi[2]}



static void Test_L_F_F()
{
  {
    init_simple_test("L_F_F");
    STRUCT_IF_C L_F_F lv;
    check2(sizeof(lv), 16, "sizeof(L_F_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_F)");
    check_field_offset(lv, v1, 0, "L_F_F.v1");
    check_field_offset(lv, v2, 8, "L_F_F.v2");
    check_field_offset(lv, v3, 12, "L_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_F, L_F_F)
//============================================================================


struct  L_F_I  {
  __tsi64 v1;
  float v2;
  int v3;
};
//SIG(1 L_F_I) C1{ FL Fi[2]}



static void Test_L_F_I()
{
  {
    init_simple_test("L_F_I");
    STRUCT_IF_C L_F_I lv;
    check2(sizeof(lv), 16, "sizeof(L_F_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_I)");
    check_field_offset(lv, v1, 0, "L_F_I.v1");
    check_field_offset(lv, v2, 8, "L_F_I.v2");
    check_field_offset(lv, v3, 12, "L_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_I, L_F_I)
//============================================================================


struct  L_F_Ip  {
  __tsi64 v1;
  float v2;
  int *v3;
};
//SIG(1 L_F_Ip) C1{ FL Fi Fp}



static void Test_L_F_Ip()
{
  {
    init_simple_test("L_F_Ip");
    STRUCT_IF_C L_F_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Ip)");
    check_field_offset(lv, v1, 0, "L_F_Ip.v1");
    check_field_offset(lv, v2, 8, "L_F_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Ip, L_F_Ip)
//============================================================================


struct  L_F_L  {
  __tsi64 v1;
  float v2;
  __tsi64 v3;
};
//SIG(1 L_F_L) C1{ FL Fi FL}



static void Test_L_F_L()
{
  {
    init_simple_test("L_F_L");
    STRUCT_IF_C L_F_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_L)");
    check_field_offset(lv, v1, 0, "L_F_L.v1");
    check_field_offset(lv, v2, 8, "L_F_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_L, L_F_L)
//============================================================================


struct  L_F_S  {
  __tsi64 v1;
  float v2;
  short v3;
};
//SIG(1 L_F_S) C1{ FL Fi Fs}



static void Test_L_F_S()
{
  {
    init_simple_test("L_F_S");
    STRUCT_IF_C L_F_S lv;
    check2(sizeof(lv), 16, "sizeof(L_F_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_S)");
    check_field_offset(lv, v1, 0, "L_F_S.v1");
    check_field_offset(lv, v2, 8, "L_F_S.v2");
    check_field_offset(lv, v3, 12, "L_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_S, L_F_S)
//============================================================================


struct  L_F_Uc  {
  __tsi64 v1;
  float v2;
  unsigned char v3;
};
//SIG(1 L_F_Uc) C1{ FL Fi Fc}



static void Test_L_F_Uc()
{
  {
    init_simple_test("L_F_Uc");
    STRUCT_IF_C L_F_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_F_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Uc)");
    check_field_offset(lv, v1, 0, "L_F_Uc.v1");
    check_field_offset(lv, v2, 8, "L_F_Uc.v2");
    check_field_offset(lv, v3, 12, "L_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Uc, L_F_Uc)
//============================================================================


struct  L_F_Ui  {
  __tsi64 v1;
  float v2;
  unsigned int v3;
};
//SIG(1 L_F_Ui) C1{ FL Fi[2]}



static void Test_L_F_Ui()
{
  {
    init_simple_test("L_F_Ui");
    STRUCT_IF_C L_F_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_F_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Ui)");
    check_field_offset(lv, v1, 0, "L_F_Ui.v1");
    check_field_offset(lv, v2, 8, "L_F_Ui.v2");
    check_field_offset(lv, v3, 12, "L_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Ui, L_F_Ui)
//============================================================================


struct  L_F_Ul  {
  __tsi64 v1;
  float v2;
  __tsu64 v3;
};
//SIG(1 L_F_Ul) C1{ FL Fi FL}



static void Test_L_F_Ul()
{
  {
    init_simple_test("L_F_Ul");
    STRUCT_IF_C L_F_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Ul)");
    check_field_offset(lv, v1, 0, "L_F_Ul.v1");
    check_field_offset(lv, v2, 8, "L_F_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Ul, L_F_Ul)
//============================================================================


struct  L_F_Us  {
  __tsi64 v1;
  float v2;
  unsigned short v3;
};
//SIG(1 L_F_Us) C1{ FL Fi Fs}



static void Test_L_F_Us()
{
  {
    init_simple_test("L_F_Us");
    STRUCT_IF_C L_F_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_F_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Us)");
    check_field_offset(lv, v1, 0, "L_F_Us.v1");
    check_field_offset(lv, v2, 8, "L_F_Us.v2");
    check_field_offset(lv, v3, 12, "L_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Us, L_F_Us)
//============================================================================


struct  L_F_Vp  {
  __tsi64 v1;
  float v2;
  void *v3;
};
//SIG(1 L_F_Vp) C1{ FL Fi Fp}



static void Test_L_F_Vp()
{
  {
    init_simple_test("L_F_Vp");
    STRUCT_IF_C L_F_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_Vp)");
    check_field_offset(lv, v1, 0, "L_F_Vp.v1");
    check_field_offset(lv, v2, 8, "L_F_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_Vp, L_F_Vp)
//============================================================================


struct  L_I  {
  __tsi64 v1;
  int v2;
};
//SIG(1 L_I) C1{ FL Fi}



static void Test_L_I()
{
  {
    init_simple_test("L_I");
    STRUCT_IF_C L_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I)");
    check_field_offset(lv, v1, 0, "L_I.v1");
    check_field_offset(lv, v2, 8, "L_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I, L_I)
//============================================================================


struct  L_I_BFu15i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:15;
};
//SIG(1 L_I_BFu15i) C1{ FL Fi Fi:15}



static void Test_L_I_BFu15i()
{
  {
    init_simple_test("L_I_BFu15i");
    static STRUCT_IF_C L_I_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu15i)");
    check_field_offset(lv, v1, 0, "L_I_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_I_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu15i, L_I_BFu15i)
//============================================================================


struct  L_I_BFu15ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 L_I_BFu15ll) C1{ FL Fi FL:15}



static void Test_L_I_BFu15ll()
{
  {
    init_simple_test("L_I_BFu15ll");
    static STRUCT_IF_C L_I_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_I_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu15ll, L_I_BFu15ll)
//============================================================================


struct  L_I_BFu15s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:15;
};
//SIG(1 L_I_BFu15s) C1{ FL Fi Fs:15}



static void Test_L_I_BFu15s()
{
  {
    init_simple_test("L_I_BFu15s");
    static STRUCT_IF_C L_I_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu15s)");
    check_field_offset(lv, v1, 0, "L_I_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_I_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu15s, L_I_BFu15s)
//============================================================================


struct  L_I_BFu16i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:16;
};
//SIG(1 L_I_BFu16i) C1{ FL Fi Fi:16}



static void Test_L_I_BFu16i()
{
  {
    init_simple_test("L_I_BFu16i");
    static STRUCT_IF_C L_I_BFu16i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu16i)");
    check_field_offset(lv, v1, 0, "L_I_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_I_BFu16i");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu16i, L_I_BFu16i)
//============================================================================


struct  L_I_BFu16ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 L_I_BFu16ll) C1{ FL Fi FL:16}



static void Test_L_I_BFu16ll()
{
  {
    init_simple_test("L_I_BFu16ll");
    static STRUCT_IF_C L_I_BFu16ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_I_BFu16ll");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu16ll, L_I_BFu16ll)
//============================================================================


struct  L_I_BFu16s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:16;
};
//SIG(1 L_I_BFu16s) C1{ FL Fi Fs:16}



static void Test_L_I_BFu16s()
{
  {
    init_simple_test("L_I_BFu16s");
    static STRUCT_IF_C L_I_BFu16s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu16s)");
    check_field_offset(lv, v1, 0, "L_I_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 12, 0, 16, 1, "L_I_BFu16s");
    set_bf_and_test(lv, v3, 12, 0, 16, hide_ull(1LL<<15), "L_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu16s, L_I_BFu16s)
//============================================================================


struct  L_I_BFu17i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:17;
};
//SIG(1 L_I_BFu17i) C1{ FL Fi Fi:17}



static void Test_L_I_BFu17i()
{
  {
    init_simple_test("L_I_BFu17i");
    static STRUCT_IF_C L_I_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu17i)");
    check_field_offset(lv, v1, 0, "L_I_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_I_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu17i, L_I_BFu17i)
//============================================================================


struct  L_I_BFu17ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 L_I_BFu17ll) C1{ FL Fi FL:17}



static void Test_L_I_BFu17ll()
{
  {
    init_simple_test("L_I_BFu17ll");
    static STRUCT_IF_C L_I_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_I_BFu17ll");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu17ll, L_I_BFu17ll)
//============================================================================


struct  L_I_BFu1c  {
  __tsi64 v1;
  int v2;
  unsigned char v3:1;
};
//SIG(1 L_I_BFu1c) C1{ FL Fi Fc:1}



static void Test_L_I_BFu1c()
{
  {
    init_simple_test("L_I_BFu1c");
    static STRUCT_IF_C L_I_BFu1c lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu1c)");
    check_field_offset(lv, v1, 0, "L_I_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu1c, L_I_BFu1c)
//============================================================================


struct  L_I_BFu1i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:1;
};
//SIG(1 L_I_BFu1i) C1{ FL Fi Fi:1}



static void Test_L_I_BFu1i()
{
  {
    init_simple_test("L_I_BFu1i");
    static STRUCT_IF_C L_I_BFu1i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu1i)");
    check_field_offset(lv, v1, 0, "L_I_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu1i, L_I_BFu1i)
//============================================================================


struct  L_I_BFu1ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 L_I_BFu1ll) C1{ FL Fi FL:1}



static void Test_L_I_BFu1ll()
{
  {
    init_simple_test("L_I_BFu1ll");
    static STRUCT_IF_C L_I_BFu1ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu1ll, L_I_BFu1ll)
//============================================================================


struct  L_I_BFu1s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:1;
};
//SIG(1 L_I_BFu1s) C1{ FL Fi Fs:1}



static void Test_L_I_BFu1s()
{
  {
    init_simple_test("L_I_BFu1s");
    static STRUCT_IF_C L_I_BFu1s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu1s)");
    check_field_offset(lv, v1, 0, "L_I_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 12, 0, 1, 1, "L_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu1s, L_I_BFu1s)
//============================================================================


struct  L_I_BFu31i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:31;
};
//SIG(1 L_I_BFu31i) C1{ FL Fi Fi:31}



static void Test_L_I_BFu31i()
{
  {
    init_simple_test("L_I_BFu31i");
    static STRUCT_IF_C L_I_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu31i)");
    check_field_offset(lv, v1, 0, "L_I_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_I_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu31i, L_I_BFu31i)
//============================================================================


struct  L_I_BFu31ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 L_I_BFu31ll) C1{ FL Fi FL:31}



static void Test_L_I_BFu31ll()
{
  {
    init_simple_test("L_I_BFu31ll");
    static STRUCT_IF_C L_I_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_I_BFu31ll");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu31ll, L_I_BFu31ll)
//============================================================================


struct  L_I_BFu32i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:32;
};
//SIG(1 L_I_BFu32i) C1{ FL Fi Fi:32}



static void Test_L_I_BFu32i()
{
  {
    init_simple_test("L_I_BFu32i");
    static STRUCT_IF_C L_I_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu32i)");
    check_field_offset(lv, v1, 0, "L_I_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_I_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu32i, L_I_BFu32i)
//============================================================================


struct  L_I_BFu32ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 L_I_BFu32ll) C1{ FL Fi FL:32}



static void Test_L_I_BFu32ll()
{
  {
    init_simple_test("L_I_BFu32ll");
    static STRUCT_IF_C L_I_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_I_BFu32ll");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu32ll, L_I_BFu32ll)
//============================================================================


struct  L_I_BFu33  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 L_I_BFu33) C1{ FL Fi FL:33}



static void Test_L_I_BFu33()
{
  {
    init_simple_test("L_I_BFu33");
    static STRUCT_IF_C L_I_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu33)");
    check_field_offset(lv, v1, 0, "L_I_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "L_I_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "L_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu33, L_I_BFu33)
//============================================================================


struct  L_I_BFu7c  {
  __tsi64 v1;
  int v2;
  unsigned char v3:7;
};
//SIG(1 L_I_BFu7c) C1{ FL Fi Fc:7}



static void Test_L_I_BFu7c()
{
  {
    init_simple_test("L_I_BFu7c");
    static STRUCT_IF_C L_I_BFu7c lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu7c)");
    check_field_offset(lv, v1, 0, "L_I_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_I_BFu7c");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu7c, L_I_BFu7c)
//============================================================================


struct  L_I_BFu7i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:7;
};
//SIG(1 L_I_BFu7i) C1{ FL Fi Fi:7}



static void Test_L_I_BFu7i()
{
  {
    init_simple_test("L_I_BFu7i");
    static STRUCT_IF_C L_I_BFu7i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu7i)");
    check_field_offset(lv, v1, 0, "L_I_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_I_BFu7i");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu7i, L_I_BFu7i)
//============================================================================


struct  L_I_BFu7ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 L_I_BFu7ll) C1{ FL Fi FL:7}



static void Test_L_I_BFu7ll()
{
  {
    init_simple_test("L_I_BFu7ll");
    static STRUCT_IF_C L_I_BFu7ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_I_BFu7ll");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu7ll, L_I_BFu7ll)
//============================================================================


struct  L_I_BFu7s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:7;
};
//SIG(1 L_I_BFu7s) C1{ FL Fi Fs:7}



static void Test_L_I_BFu7s()
{
  {
    init_simple_test("L_I_BFu7s");
    static STRUCT_IF_C L_I_BFu7s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu7s)");
    check_field_offset(lv, v1, 0, "L_I_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 12, 0, 7, 1, "L_I_BFu7s");
    set_bf_and_test(lv, v3, 12, 0, 7, hide_ull(1LL<<6), "L_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu7s, L_I_BFu7s)
//============================================================================


struct  L_I_BFu8c  {
  __tsi64 v1;
  int v2;
  unsigned char v3:8;
};
//SIG(1 L_I_BFu8c) C1{ FL Fi Fc:8}



static void Test_L_I_BFu8c()
{
  {
    init_simple_test("L_I_BFu8c");
    static STRUCT_IF_C L_I_BFu8c lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu8c)");
    check_field_offset(lv, v1, 0, "L_I_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_I_BFu8c");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu8c, L_I_BFu8c)
//============================================================================


struct  L_I_BFu8i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:8;
};
//SIG(1 L_I_BFu8i) C1{ FL Fi Fi:8}



static void Test_L_I_BFu8i()
{
  {
    init_simple_test("L_I_BFu8i");
    static STRUCT_IF_C L_I_BFu8i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu8i)");
    check_field_offset(lv, v1, 0, "L_I_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_I_BFu8i");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu8i, L_I_BFu8i)
//============================================================================


struct  L_I_BFu8ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 L_I_BFu8ll) C1{ FL Fi FL:8}



static void Test_L_I_BFu8ll()
{
  {
    init_simple_test("L_I_BFu8ll");
    static STRUCT_IF_C L_I_BFu8ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_I_BFu8ll");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu8ll, L_I_BFu8ll)
//============================================================================


struct  L_I_BFu8s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:8;
};
//SIG(1 L_I_BFu8s) C1{ FL Fi Fs:8}



static void Test_L_I_BFu8s()
{
  {
    init_simple_test("L_I_BFu8s");
    static STRUCT_IF_C L_I_BFu8s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu8s)");
    check_field_offset(lv, v1, 0, "L_I_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 12, 0, 8, 1, "L_I_BFu8s");
    set_bf_and_test(lv, v3, 12, 0, 8, hide_ull(1LL<<7), "L_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu8s, L_I_BFu8s)
//============================================================================


struct  L_I_BFu9i  {
  __tsi64 v1;
  int v2;
  unsigned int v3:9;
};
//SIG(1 L_I_BFu9i) C1{ FL Fi Fi:9}



static void Test_L_I_BFu9i()
{
  {
    init_simple_test("L_I_BFu9i");
    static STRUCT_IF_C L_I_BFu9i lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu9i)");
    check_field_offset(lv, v1, 0, "L_I_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_I_BFu9i");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu9i, L_I_BFu9i)
//============================================================================


struct  L_I_BFu9ll  {
  __tsi64 v1;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 L_I_BFu9ll) C1{ FL Fi FL:9}



static void Test_L_I_BFu9ll()
{
  {
    init_simple_test("L_I_BFu9ll");
    static STRUCT_IF_C L_I_BFu9ll lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_I_BFu9ll");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu9ll, L_I_BFu9ll)
//============================================================================


struct  L_I_BFu9s  {
  __tsi64 v1;
  int v2;
  unsigned short v3:9;
};
//SIG(1 L_I_BFu9s) C1{ FL Fi Fs:9}



static void Test_L_I_BFu9s()
{
  {
    init_simple_test("L_I_BFu9s");
    static STRUCT_IF_C L_I_BFu9s lv;
    check2(sizeof(lv), 16, "sizeof(L_I_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu9s)");
    check_field_offset(lv, v1, 0, "L_I_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 12, 0, 9, 1, "L_I_BFu9s");
    set_bf_and_test(lv, v3, 12, 0, 9, hide_ull(1LL<<8), "L_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu9s, L_I_BFu9s)
//============================================================================


struct  L_I_C  {
  __tsi64 v1;
  int v2;
  char v3;
};
//SIG(1 L_I_C) C1{ FL Fi Fc}



static void Test_L_I_C()
{
  {
    init_simple_test("L_I_C");
    STRUCT_IF_C L_I_C lv;
    check2(sizeof(lv), 16, "sizeof(L_I_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_C)");
    check_field_offset(lv, v1, 0, "L_I_C.v1");
    check_field_offset(lv, v2, 8, "L_I_C.v2");
    check_field_offset(lv, v3, 12, "L_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_C, L_I_C)
//============================================================================


struct  L_I_D  {
  __tsi64 v1;
  int v2;
  double v3;
};
//SIG(1 L_I_D) C1{ FL Fi FL}



static void Test_L_I_D()
{
  {
    init_simple_test("L_I_D");
    STRUCT_IF_C L_I_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_D)");
    check_field_offset(lv, v1, 0, "L_I_D.v1");
    check_field_offset(lv, v2, 8, "L_I_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_D, L_I_D)
//============================================================================


struct  L_I_F  {
  __tsi64 v1;
  int v2;
  float v3;
};
//SIG(1 L_I_F) C1{ FL Fi[2]}



static void Test_L_I_F()
{
  {
    init_simple_test("L_I_F");
    STRUCT_IF_C L_I_F lv;
    check2(sizeof(lv), 16, "sizeof(L_I_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_F)");
    check_field_offset(lv, v1, 0, "L_I_F.v1");
    check_field_offset(lv, v2, 8, "L_I_F.v2");
    check_field_offset(lv, v3, 12, "L_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_F, L_I_F)
//============================================================================


struct  L_I_I  {
  __tsi64 v1;
  int v2;
  int v3;
};
//SIG(1 L_I_I) C1{ FL Fi[2]}



static void Test_L_I_I()
{
  {
    init_simple_test("L_I_I");
    STRUCT_IF_C L_I_I lv;
    check2(sizeof(lv), 16, "sizeof(L_I_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_I)");
    check_field_offset(lv, v1, 0, "L_I_I.v1");
    check_field_offset(lv, v2, 8, "L_I_I.v2");
    check_field_offset(lv, v3, 12, "L_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_I, L_I_I)
//============================================================================


struct  L_I_Ip  {
  __tsi64 v1;
  int v2;
  int *v3;
};
//SIG(1 L_I_Ip) C1{ FL Fi Fp}



static void Test_L_I_Ip()
{
  {
    init_simple_test("L_I_Ip");
    STRUCT_IF_C L_I_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Ip)");
    check_field_offset(lv, v1, 0, "L_I_Ip.v1");
    check_field_offset(lv, v2, 8, "L_I_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Ip, L_I_Ip)
//============================================================================


struct  L_I_L  {
  __tsi64 v1;
  int v2;
  __tsi64 v3;
};
//SIG(1 L_I_L) C1{ FL Fi FL}



static void Test_L_I_L()
{
  {
    init_simple_test("L_I_L");
    STRUCT_IF_C L_I_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_L)");
    check_field_offset(lv, v1, 0, "L_I_L.v1");
    check_field_offset(lv, v2, 8, "L_I_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_L, L_I_L)
//============================================================================


struct  L_I_S  {
  __tsi64 v1;
  int v2;
  short v3;
};
//SIG(1 L_I_S) C1{ FL Fi Fs}



static void Test_L_I_S()
{
  {
    init_simple_test("L_I_S");
    STRUCT_IF_C L_I_S lv;
    check2(sizeof(lv), 16, "sizeof(L_I_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_S)");
    check_field_offset(lv, v1, 0, "L_I_S.v1");
    check_field_offset(lv, v2, 8, "L_I_S.v2");
    check_field_offset(lv, v3, 12, "L_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_S, L_I_S)
//============================================================================


struct  L_I_Uc  {
  __tsi64 v1;
  int v2;
  unsigned char v3;
};
//SIG(1 L_I_Uc) C1{ FL Fi Fc}



static void Test_L_I_Uc()
{
  {
    init_simple_test("L_I_Uc");
    STRUCT_IF_C L_I_Uc lv;
    check2(sizeof(lv), 16, "sizeof(L_I_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Uc)");
    check_field_offset(lv, v1, 0, "L_I_Uc.v1");
    check_field_offset(lv, v2, 8, "L_I_Uc.v2");
    check_field_offset(lv, v3, 12, "L_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Uc, L_I_Uc)
//============================================================================


struct  L_I_Ui  {
  __tsi64 v1;
  int v2;
  unsigned int v3;
};
//SIG(1 L_I_Ui) C1{ FL Fi[2]}



static void Test_L_I_Ui()
{
  {
    init_simple_test("L_I_Ui");
    STRUCT_IF_C L_I_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_I_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Ui)");
    check_field_offset(lv, v1, 0, "L_I_Ui.v1");
    check_field_offset(lv, v2, 8, "L_I_Ui.v2");
    check_field_offset(lv, v3, 12, "L_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Ui, L_I_Ui)
//============================================================================


struct  L_I_Ul  {
  __tsi64 v1;
  int v2;
  __tsu64 v3;
};
//SIG(1 L_I_Ul) C1{ FL Fi FL}



static void Test_L_I_Ul()
{
  {
    init_simple_test("L_I_Ul");
    STRUCT_IF_C L_I_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Ul)");
    check_field_offset(lv, v1, 0, "L_I_Ul.v1");
    check_field_offset(lv, v2, 8, "L_I_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Ul, L_I_Ul)
//============================================================================


struct  L_I_Us  {
  __tsi64 v1;
  int v2;
  unsigned short v3;
};
//SIG(1 L_I_Us) C1{ FL Fi Fs}



static void Test_L_I_Us()
{
  {
    init_simple_test("L_I_Us");
    STRUCT_IF_C L_I_Us lv;
    check2(sizeof(lv), 16, "sizeof(L_I_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Us)");
    check_field_offset(lv, v1, 0, "L_I_Us.v1");
    check_field_offset(lv, v2, 8, "L_I_Us.v2");
    check_field_offset(lv, v3, 12, "L_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Us, L_I_Us)
//============================================================================


struct  L_I_Vp  {
  __tsi64 v1;
  int v2;
  void *v3;
};
//SIG(1 L_I_Vp) C1{ FL Fi Fp}



static void Test_L_I_Vp()
{
  {
    init_simple_test("L_I_Vp");
    STRUCT_IF_C L_I_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_Vp)");
    check_field_offset(lv, v1, 0, "L_I_Vp.v1");
    check_field_offset(lv, v2, 8, "L_I_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_Vp, L_I_Vp)
//============================================================================


struct  L_Ip  {
  __tsi64 v1;
  int *v2;
};
//SIG(1 L_Ip) C1{ FL Fp}



static void Test_L_Ip()
{
  {
    init_simple_test("L_Ip");
    STRUCT_IF_C L_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip)");
    check_field_offset(lv, v1, 0, "L_Ip.v1");
    check_field_offset(lv, v2, 8, "L_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip, L_Ip)
//============================================================================


struct  L_Ip_BFu15i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 L_Ip_BFu15i) C1{ FL Fp Fi:15}



static void Test_L_Ip_BFu15i()
{
  {
    init_simple_test("L_Ip_BFu15i");
    static STRUCT_IF_C L_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu15i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "L_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "L_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu15i, L_Ip_BFu15i)
//============================================================================


struct  L_Ip_BFu15ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 L_Ip_BFu15ll) C1{ FL Fp FL:15}



static void Test_L_Ip_BFu15ll()
{
  {
    init_simple_test("L_Ip_BFu15ll");
    static STRUCT_IF_C L_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "L_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "L_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu15ll, L_Ip_BFu15ll)
//============================================================================


struct  L_Ip_BFu15s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 L_Ip_BFu15s) C1{ FL Fp Fs:15}



static void Test_L_Ip_BFu15s()
{
  {
    init_simple_test("L_Ip_BFu15s");
    static STRUCT_IF_C L_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu15s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "L_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "L_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu15s, L_Ip_BFu15s)
//============================================================================


struct  L_Ip_BFu16i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 L_Ip_BFu16i) C1{ FL Fp Fi:16}



static void Test_L_Ip_BFu16i()
{
  {
    init_simple_test("L_Ip_BFu16i");
    static STRUCT_IF_C L_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu16i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "L_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "L_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu16i, L_Ip_BFu16i)
//============================================================================


struct  L_Ip_BFu16ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 L_Ip_BFu16ll) C1{ FL Fp FL:16}



static void Test_L_Ip_BFu16ll()
{
  {
    init_simple_test("L_Ip_BFu16ll");
    static STRUCT_IF_C L_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "L_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "L_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu16ll, L_Ip_BFu16ll)
//============================================================================


struct  L_Ip_BFu16s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 L_Ip_BFu16s) C1{ FL Fp Fs:16}



static void Test_L_Ip_BFu16s()
{
  {
    init_simple_test("L_Ip_BFu16s");
    static STRUCT_IF_C L_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu16s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "L_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "L_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu16s, L_Ip_BFu16s)
//============================================================================


struct  L_Ip_BFu17i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 L_Ip_BFu17i) C1{ FL Fp Fi:17}



static void Test_L_Ip_BFu17i()
{
  {
    init_simple_test("L_Ip_BFu17i");
    static STRUCT_IF_C L_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu17i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "L_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "L_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu17i, L_Ip_BFu17i)
//============================================================================


struct  L_Ip_BFu17ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 L_Ip_BFu17ll) C1{ FL Fp FL:17}



static void Test_L_Ip_BFu17ll()
{
  {
    init_simple_test("L_Ip_BFu17ll");
    static STRUCT_IF_C L_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "L_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "L_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu17ll, L_Ip_BFu17ll)
//============================================================================


struct  L_Ip_BFu1c  {
  __tsi64 v1;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 L_Ip_BFu1c) C1{ FL Fp Fc:1}



static void Test_L_Ip_BFu1c()
{
  {
    init_simple_test("L_Ip_BFu1c");
    static STRUCT_IF_C L_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "L_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu1c, L_Ip_BFu1c)
//============================================================================


struct  L_Ip_BFu1i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 L_Ip_BFu1i) C1{ FL Fp Fi:1}



static void Test_L_Ip_BFu1i()
{
  {
    init_simple_test("L_Ip_BFu1i");
    static STRUCT_IF_C L_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "L_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu1i, L_Ip_BFu1i)
//============================================================================


struct  L_Ip_BFu1ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 L_Ip_BFu1ll) C1{ FL Fp FL:1}



static void Test_L_Ip_BFu1ll()
{
  {
    init_simple_test("L_Ip_BFu1ll");
    static STRUCT_IF_C L_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "L_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu1ll, L_Ip_BFu1ll)
//============================================================================


struct  L_Ip_BFu1s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 L_Ip_BFu1s) C1{ FL Fp Fs:1}



static void Test_L_Ip_BFu1s()
{
  {
    init_simple_test("L_Ip_BFu1s");
    static STRUCT_IF_C L_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "L_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu1s, L_Ip_BFu1s)
//============================================================================


struct  L_Ip_BFu31i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 L_Ip_BFu31i) C1{ FL Fp Fi:31}



static void Test_L_Ip_BFu31i()
{
  {
    init_simple_test("L_Ip_BFu31i");
    static STRUCT_IF_C L_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu31i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "L_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "L_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu31i, L_Ip_BFu31i)
//============================================================================


struct  L_Ip_BFu31ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 L_Ip_BFu31ll) C1{ FL Fp FL:31}



static void Test_L_Ip_BFu31ll()
{
  {
    init_simple_test("L_Ip_BFu31ll");
    static STRUCT_IF_C L_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "L_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "L_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu31ll, L_Ip_BFu31ll)
//============================================================================


struct  L_Ip_BFu32i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 L_Ip_BFu32i) C1{ FL Fp Fi:32}



static void Test_L_Ip_BFu32i()
{
  {
    init_simple_test("L_Ip_BFu32i");
    static STRUCT_IF_C L_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "L_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "L_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu32i, L_Ip_BFu32i)
//============================================================================


struct  L_Ip_BFu32ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 L_Ip_BFu32ll) C1{ FL Fp FL:32}



static void Test_L_Ip_BFu32ll()
{
  {
    init_simple_test("L_Ip_BFu32ll");
    static STRUCT_IF_C L_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "L_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "L_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu32ll, L_Ip_BFu32ll)
//============================================================================


struct  L_Ip_BFu33  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 L_Ip_BFu33) C1{ FL Fp FL:33}



static void Test_L_Ip_BFu33()
{
  {
    init_simple_test("L_Ip_BFu33");
    static STRUCT_IF_C L_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu33)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "L_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "L_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu33, L_Ip_BFu33)
//============================================================================


struct  L_Ip_BFu7c  {
  __tsi64 v1;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 L_Ip_BFu7c) C1{ FL Fp Fc:7}



static void Test_L_Ip_BFu7c()
{
  {
    init_simple_test("L_Ip_BFu7c");
    static STRUCT_IF_C L_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "L_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "L_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu7c, L_Ip_BFu7c)
//============================================================================


struct  L_Ip_BFu7i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 L_Ip_BFu7i) C1{ FL Fp Fi:7}



static void Test_L_Ip_BFu7i()
{
  {
    init_simple_test("L_Ip_BFu7i");
    static STRUCT_IF_C L_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "L_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "L_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu7i, L_Ip_BFu7i)
//============================================================================


struct  L_Ip_BFu7ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 L_Ip_BFu7ll) C1{ FL Fp FL:7}



static void Test_L_Ip_BFu7ll()
{
  {
    init_simple_test("L_Ip_BFu7ll");
    static STRUCT_IF_C L_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "L_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "L_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu7ll, L_Ip_BFu7ll)
//============================================================================


struct  L_Ip_BFu7s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 L_Ip_BFu7s) C1{ FL Fp Fs:7}



static void Test_L_Ip_BFu7s()
{
  {
    init_simple_test("L_Ip_BFu7s");
    static STRUCT_IF_C L_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "L_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "L_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu7s, L_Ip_BFu7s)
//============================================================================


struct  L_Ip_BFu8c  {
  __tsi64 v1;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 L_Ip_BFu8c) C1{ FL Fp Fc:8}



static void Test_L_Ip_BFu8c()
{
  {
    init_simple_test("L_Ip_BFu8c");
    static STRUCT_IF_C L_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "L_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "L_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu8c, L_Ip_BFu8c)
//============================================================================


struct  L_Ip_BFu8i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 L_Ip_BFu8i) C1{ FL Fp Fi:8}



static void Test_L_Ip_BFu8i()
{
  {
    init_simple_test("L_Ip_BFu8i");
    static STRUCT_IF_C L_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "L_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "L_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu8i, L_Ip_BFu8i)
//============================================================================


struct  L_Ip_BFu8ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 L_Ip_BFu8ll) C1{ FL Fp FL:8}



static void Test_L_Ip_BFu8ll()
{
  {
    init_simple_test("L_Ip_BFu8ll");
    static STRUCT_IF_C L_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "L_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "L_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu8ll, L_Ip_BFu8ll)
//============================================================================


struct  L_Ip_BFu8s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 L_Ip_BFu8s) C1{ FL Fp Fs:8}



static void Test_L_Ip_BFu8s()
{
  {
    init_simple_test("L_Ip_BFu8s");
    static STRUCT_IF_C L_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "L_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "L_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu8s, L_Ip_BFu8s)
//============================================================================


struct  L_Ip_BFu9i  {
  __tsi64 v1;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 L_Ip_BFu9i) C1{ FL Fp Fi:9}



static void Test_L_Ip_BFu9i()
{
  {
    init_simple_test("L_Ip_BFu9i");
    static STRUCT_IF_C L_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "L_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "L_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu9i, L_Ip_BFu9i)
//============================================================================


struct  L_Ip_BFu9ll  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 L_Ip_BFu9ll) C1{ FL Fp FL:9}



static void Test_L_Ip_BFu9ll()
{
  {
    init_simple_test("L_Ip_BFu9ll");
    static STRUCT_IF_C L_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "L_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "L_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu9ll, L_Ip_BFu9ll)
//============================================================================


struct  L_Ip_BFu9s  {
  __tsi64 v1;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 L_Ip_BFu9s) C1{ FL Fp Fs:9}



static void Test_L_Ip_BFu9s()
{
  {
    init_simple_test("L_Ip_BFu9s");
    static STRUCT_IF_C L_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "L_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "L_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu9s, L_Ip_BFu9s)
//============================================================================


struct  L_Ip_C  {
  __tsi64 v1;
  int *v2;
  char v3;
};
//SIG(1 L_Ip_C) C1{ FL Fp Fc}



static void Test_L_Ip_C()
{
  {
    init_simple_test("L_Ip_C");
    STRUCT_IF_C L_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_C)");
    check_field_offset(lv, v1, 0, "L_Ip_C.v1");
    check_field_offset(lv, v2, 8, "L_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_C, L_Ip_C)
//============================================================================


struct  L_Ip_D  {
  __tsi64 v1;
  int *v2;
  double v3;
};
//SIG(1 L_Ip_D) C1{ FL Fp FL}



static void Test_L_Ip_D()
{
  {
    init_simple_test("L_Ip_D");
    STRUCT_IF_C L_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_D)");
    check_field_offset(lv, v1, 0, "L_Ip_D.v1");
    check_field_offset(lv, v2, 8, "L_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_D, L_Ip_D)
//============================================================================


struct  L_Ip_F  {
  __tsi64 v1;
  int *v2;
  float v3;
};
//SIG(1 L_Ip_F) C1{ FL Fp Fi}



static void Test_L_Ip_F()
{
  {
    init_simple_test("L_Ip_F");
    STRUCT_IF_C L_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_F)");
    check_field_offset(lv, v1, 0, "L_Ip_F.v1");
    check_field_offset(lv, v2, 8, "L_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_F, L_Ip_F)
//============================================================================


struct  L_Ip_I  {
  __tsi64 v1;
  int *v2;
  int v3;
};
//SIG(1 L_Ip_I) C1{ FL Fp Fi}



static void Test_L_Ip_I()
{
  {
    init_simple_test("L_Ip_I");
    STRUCT_IF_C L_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_I)");
    check_field_offset(lv, v1, 0, "L_Ip_I.v1");
    check_field_offset(lv, v2, 8, "L_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_I, L_Ip_I)
//============================================================================


struct  L_Ip_Ip  {
  __tsi64 v1;
  int *v2;
  int *v3;
};
//SIG(1 L_Ip_Ip) C1{ FL Fp[2]}



static void Test_L_Ip_Ip()
{
  {
    init_simple_test("L_Ip_Ip");
    STRUCT_IF_C L_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Ip)");
    check_field_offset(lv, v1, 0, "L_Ip_Ip.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Ip, L_Ip_Ip)
//============================================================================


struct  L_Ip_L  {
  __tsi64 v1;
  int *v2;
  __tsi64 v3;
};
//SIG(1 L_Ip_L) C1{ FL Fp FL}



static void Test_L_Ip_L()
{
  {
    init_simple_test("L_Ip_L");
    STRUCT_IF_C L_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_L)");
    check_field_offset(lv, v1, 0, "L_Ip_L.v1");
    check_field_offset(lv, v2, 8, "L_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_L, L_Ip_L)
//============================================================================


struct  L_Ip_S  {
  __tsi64 v1;
  int *v2;
  short v3;
};
//SIG(1 L_Ip_S) C1{ FL Fp Fs}



static void Test_L_Ip_S()
{
  {
    init_simple_test("L_Ip_S");
    STRUCT_IF_C L_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_S)");
    check_field_offset(lv, v1, 0, "L_Ip_S.v1");
    check_field_offset(lv, v2, 8, "L_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_S, L_Ip_S)
//============================================================================


struct  L_Ip_Uc  {
  __tsi64 v1;
  int *v2;
  unsigned char v3;
};
//SIG(1 L_Ip_Uc) C1{ FL Fp Fc}



static void Test_L_Ip_Uc()
{
  {
    init_simple_test("L_Ip_Uc");
    STRUCT_IF_C L_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Uc)");
    check_field_offset(lv, v1, 0, "L_Ip_Uc.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Uc, L_Ip_Uc)
//============================================================================


struct  L_Ip_Ui  {
  __tsi64 v1;
  int *v2;
  unsigned int v3;
};
//SIG(1 L_Ip_Ui) C1{ FL Fp Fi}



static void Test_L_Ip_Ui()
{
  {
    init_simple_test("L_Ip_Ui");
    STRUCT_IF_C L_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Ui)");
    check_field_offset(lv, v1, 0, "L_Ip_Ui.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Ui, L_Ip_Ui)
//============================================================================


struct  L_Ip_Ul  {
  __tsi64 v1;
  int *v2;
  __tsu64 v3;
};
//SIG(1 L_Ip_Ul) C1{ FL Fp FL}



static void Test_L_Ip_Ul()
{
  {
    init_simple_test("L_Ip_Ul");
    STRUCT_IF_C L_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Ul)");
    check_field_offset(lv, v1, 0, "L_Ip_Ul.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Ul, L_Ip_Ul)
//============================================================================


struct  L_Ip_Us  {
  __tsi64 v1;
  int *v2;
  unsigned short v3;
};
//SIG(1 L_Ip_Us) C1{ FL Fp Fs}



static void Test_L_Ip_Us()
{
  {
    init_simple_test("L_Ip_Us");
    STRUCT_IF_C L_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Us)");
    check_field_offset(lv, v1, 0, "L_Ip_Us.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Us, L_Ip_Us)
//============================================================================


struct  L_Ip_Vp  {
  __tsi64 v1;
  int *v2;
  void *v3;
};
//SIG(1 L_Ip_Vp) C1{ FL Fp[2]}



static void Test_L_Ip_Vp()
{
  {
    init_simple_test("L_Ip_Vp");
    STRUCT_IF_C L_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_Vp)");
    check_field_offset(lv, v1, 0, "L_Ip_Vp.v1");
    check_field_offset(lv, v2, 8, "L_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_Vp, L_Ip_Vp)
//============================================================================


struct  L_L  {
  __tsi64 v1;
  __tsi64 v2;
};
//SIG(1 L_L) C1{ FL[2]}



static void Test_L_L()
{
  {
    init_simple_test("L_L");
    STRUCT_IF_C L_L lv;
    check2(sizeof(lv), 16, "sizeof(L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L)");
    check_field_offset(lv, v1, 0, "L_L.v1");
    check_field_offset(lv, v2, 8, "L_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L, L_L)
//============================================================================


struct  L_L_BFu15i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 L_L_BFu15i) C1{ FL[2] Fi:15}



static void Test_L_L_BFu15i()
{
  {
    init_simple_test("L_L_BFu15i");
    static STRUCT_IF_C L_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu15i)");
    check_field_offset(lv, v1, 0, "L_L_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu15i.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_L_BFu15i");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu15i, L_L_BFu15i)
//============================================================================


struct  L_L_BFu15ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 L_L_BFu15ll) C1{ FL[2] FL:15}



static void Test_L_L_BFu15ll()
{
  {
    init_simple_test("L_L_BFu15ll");
    static STRUCT_IF_C L_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_L_BFu15ll");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu15ll, L_L_BFu15ll)
//============================================================================


struct  L_L_BFu15s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 L_L_BFu15s) C1{ FL[2] Fs:15}



static void Test_L_L_BFu15s()
{
  {
    init_simple_test("L_L_BFu15s");
    static STRUCT_IF_C L_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu15s)");
    check_field_offset(lv, v1, 0, "L_L_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu15s.v2");
    set_bf_and_test(lv, v3, 16, 0, 15, 1, "L_L_BFu15s");
    set_bf_and_test(lv, v3, 16, 0, 15, hide_ull(1LL<<14), "L_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu15s, L_L_BFu15s)
//============================================================================


struct  L_L_BFu16i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 L_L_BFu16i) C1{ FL[2] Fi:16}



static void Test_L_L_BFu16i()
{
  {
    init_simple_test("L_L_BFu16i");
    static STRUCT_IF_C L_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu16i)");
    check_field_offset(lv, v1, 0, "L_L_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu16i.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_L_BFu16i");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu16i, L_L_BFu16i)
//============================================================================


struct  L_L_BFu16ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 L_L_BFu16ll) C1{ FL[2] FL:16}



static void Test_L_L_BFu16ll()
{
  {
    init_simple_test("L_L_BFu16ll");
    static STRUCT_IF_C L_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_L_BFu16ll");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu16ll, L_L_BFu16ll)
//============================================================================


struct  L_L_BFu16s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 L_L_BFu16s) C1{ FL[2] Fs:16}



static void Test_L_L_BFu16s()
{
  {
    init_simple_test("L_L_BFu16s");
    static STRUCT_IF_C L_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu16s)");
    check_field_offset(lv, v1, 0, "L_L_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu16s.v2");
    set_bf_and_test(lv, v3, 16, 0, 16, 1, "L_L_BFu16s");
    set_bf_and_test(lv, v3, 16, 0, 16, hide_ull(1LL<<15), "L_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu16s, L_L_BFu16s)
//============================================================================


struct  L_L_BFu17i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 L_L_BFu17i) C1{ FL[2] Fi:17}



static void Test_L_L_BFu17i()
{
  {
    init_simple_test("L_L_BFu17i");
    static STRUCT_IF_C L_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu17i)");
    check_field_offset(lv, v1, 0, "L_L_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu17i.v2");
    set_bf_and_test(lv, v3, 16, 0, 17, 1, "L_L_BFu17i");
    set_bf_and_test(lv, v3, 16, 0, 17, hide_ull(1LL<<16), "L_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu17i, L_L_BFu17i)
//============================================================================


struct  L_L_BFu17ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 L_L_BFu17ll) C1{ FL[2] FL:17}



static void Test_L_L_BFu17ll()
{
  {
    init_simple_test("L_L_BFu17ll");
    static STRUCT_IF_C L_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 17, 1, "L_L_BFu17ll");
    set_bf_and_test(lv, v3, 16, 0, 17, hide_ull(1LL<<16), "L_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu17ll, L_L_BFu17ll)
//============================================================================


struct  L_L_BFu1c  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 L_L_BFu1c) C1{ FL[2] Fc:1}



static void Test_L_L_BFu1c()
{
  {
    init_simple_test("L_L_BFu1c");
    static STRUCT_IF_C L_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu1c)");
    check_field_offset(lv, v1, 0, "L_L_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu1c.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu1c, L_L_BFu1c)
//============================================================================


struct  L_L_BFu1i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 L_L_BFu1i) C1{ FL[2] Fi:1}



static void Test_L_L_BFu1i()
{
  {
    init_simple_test("L_L_BFu1i");
    static STRUCT_IF_C L_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu1i)");
    check_field_offset(lv, v1, 0, "L_L_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu1i.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu1i, L_L_BFu1i)
//============================================================================


struct  L_L_BFu1ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 L_L_BFu1ll) C1{ FL[2] FL:1}



static void Test_L_L_BFu1ll()
{
  {
    init_simple_test("L_L_BFu1ll");
    static STRUCT_IF_C L_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu1ll, L_L_BFu1ll)
//============================================================================


struct  L_L_BFu1s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 L_L_BFu1s) C1{ FL[2] Fs:1}



static void Test_L_L_BFu1s()
{
  {
    init_simple_test("L_L_BFu1s");
    static STRUCT_IF_C L_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu1s)");
    check_field_offset(lv, v1, 0, "L_L_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu1s.v2");
    set_bf_and_test(lv, v3, 16, 0, 1, 1, "L_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu1s, L_L_BFu1s)
//============================================================================


struct  L_L_BFu31i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 L_L_BFu31i) C1{ FL[2] Fi:31}



static void Test_L_L_BFu31i()
{
  {
    init_simple_test("L_L_BFu31i");
    static STRUCT_IF_C L_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu31i)");
    check_field_offset(lv, v1, 0, "L_L_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu31i.v2");
    set_bf_and_test(lv, v3, 16, 0, 31, 1, "L_L_BFu31i");
    set_bf_and_test(lv, v3, 16, 0, 31, hide_ull(1LL<<30), "L_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu31i, L_L_BFu31i)
//============================================================================


struct  L_L_BFu31ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 L_L_BFu31ll) C1{ FL[2] FL:31}



static void Test_L_L_BFu31ll()
{
  {
    init_simple_test("L_L_BFu31ll");
    static STRUCT_IF_C L_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 31, 1, "L_L_BFu31ll");
    set_bf_and_test(lv, v3, 16, 0, 31, hide_ull(1LL<<30), "L_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu31ll, L_L_BFu31ll)
//============================================================================


struct  L_L_BFu32i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 L_L_BFu32i) C1{ FL[2] Fi:32}



static void Test_L_L_BFu32i()
{
  {
    init_simple_test("L_L_BFu32i");
    static STRUCT_IF_C L_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu32i)");
    check_field_offset(lv, v1, 0, "L_L_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu32i.v2");
    set_bf_and_test(lv, v3, 16, 0, 32, 1, "L_L_BFu32i");
    set_bf_and_test(lv, v3, 16, 0, 32, hide_ull(1LL<<31), "L_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu32i, L_L_BFu32i)
//============================================================================


struct  L_L_BFu32ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 L_L_BFu32ll) C1{ FL[2] FL:32}



static void Test_L_L_BFu32ll()
{
  {
    init_simple_test("L_L_BFu32ll");
    static STRUCT_IF_C L_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 32, 1, "L_L_BFu32ll");
    set_bf_and_test(lv, v3, 16, 0, 32, hide_ull(1LL<<31), "L_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu32ll, L_L_BFu32ll)
//============================================================================


struct  L_L_BFu33  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 L_L_BFu33) C1{ FL[2] FL:33}



static void Test_L_L_BFu33()
{
  {
    init_simple_test("L_L_BFu33");
    static STRUCT_IF_C L_L_BFu33 lv;
    check2(sizeof(lv), 24, "sizeof(L_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu33)");
    check_field_offset(lv, v1, 0, "L_L_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu33.v2");
    set_bf_and_test(lv, v3, 16, 0, 33, 1, "L_L_BFu33");
    set_bf_and_test(lv, v3, 16, 0, 33, hide_ull(1LL<<32), "L_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu33, L_L_BFu33)
//============================================================================


struct  L_L_BFu7c  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 L_L_BFu7c) C1{ FL[2] Fc:7}



static void Test_L_L_BFu7c()
{
  {
    init_simple_test("L_L_BFu7c");
    static STRUCT_IF_C L_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu7c)");
    check_field_offset(lv, v1, 0, "L_L_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu7c.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_L_BFu7c");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu7c, L_L_BFu7c)
//============================================================================


struct  L_L_BFu7i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 L_L_BFu7i) C1{ FL[2] Fi:7}



static void Test_L_L_BFu7i()
{
  {
    init_simple_test("L_L_BFu7i");
    static STRUCT_IF_C L_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu7i)");
    check_field_offset(lv, v1, 0, "L_L_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu7i.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_L_BFu7i");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu7i, L_L_BFu7i)
//============================================================================


struct  L_L_BFu7ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 L_L_BFu7ll) C1{ FL[2] FL:7}



static void Test_L_L_BFu7ll()
{
  {
    init_simple_test("L_L_BFu7ll");
    static STRUCT_IF_C L_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_L_BFu7ll");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu7ll, L_L_BFu7ll)
//============================================================================


struct  L_L_BFu7s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 L_L_BFu7s) C1{ FL[2] Fs:7}



static void Test_L_L_BFu7s()
{
  {
    init_simple_test("L_L_BFu7s");
    static STRUCT_IF_C L_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu7s)");
    check_field_offset(lv, v1, 0, "L_L_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu7s.v2");
    set_bf_and_test(lv, v3, 16, 0, 7, 1, "L_L_BFu7s");
    set_bf_and_test(lv, v3, 16, 0, 7, hide_ull(1LL<<6), "L_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu7s, L_L_BFu7s)
//============================================================================


struct  L_L_BFu8c  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 L_L_BFu8c) C1{ FL[2] Fc:8}



static void Test_L_L_BFu8c()
{
  {
    init_simple_test("L_L_BFu8c");
    static STRUCT_IF_C L_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu8c)");
    check_field_offset(lv, v1, 0, "L_L_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu8c.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_L_BFu8c");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu8c, L_L_BFu8c)
//============================================================================


struct  L_L_BFu8i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 L_L_BFu8i) C1{ FL[2] Fi:8}



static void Test_L_L_BFu8i()
{
  {
    init_simple_test("L_L_BFu8i");
    static STRUCT_IF_C L_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu8i)");
    check_field_offset(lv, v1, 0, "L_L_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu8i.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_L_BFu8i");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu8i, L_L_BFu8i)
//============================================================================


struct  L_L_BFu8ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 L_L_BFu8ll) C1{ FL[2] FL:8}



static void Test_L_L_BFu8ll()
{
  {
    init_simple_test("L_L_BFu8ll");
    static STRUCT_IF_C L_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_L_BFu8ll");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu8ll, L_L_BFu8ll)
//============================================================================


struct  L_L_BFu8s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 L_L_BFu8s) C1{ FL[2] Fs:8}



static void Test_L_L_BFu8s()
{
  {
    init_simple_test("L_L_BFu8s");
    static STRUCT_IF_C L_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu8s)");
    check_field_offset(lv, v1, 0, "L_L_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu8s.v2");
    set_bf_and_test(lv, v3, 16, 0, 8, 1, "L_L_BFu8s");
    set_bf_and_test(lv, v3, 16, 0, 8, hide_ull(1LL<<7), "L_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu8s, L_L_BFu8s)
//============================================================================


struct  L_L_BFu9i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 L_L_BFu9i) C1{ FL[2] Fi:9}



static void Test_L_L_BFu9i()
{
  {
    init_simple_test("L_L_BFu9i");
    static STRUCT_IF_C L_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu9i)");
    check_field_offset(lv, v1, 0, "L_L_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu9i.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_L_BFu9i");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu9i, L_L_BFu9i)
//============================================================================


struct  L_L_BFu9ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 L_L_BFu9ll) C1{ FL[2] FL:9}



static void Test_L_L_BFu9ll()
{
  {
    init_simple_test("L_L_BFu9ll");
    static STRUCT_IF_C L_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_L_BFu9ll");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu9ll, L_L_BFu9ll)
//============================================================================


struct  L_L_BFu9s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 L_L_BFu9s) C1{ FL[2] Fs:9}



static void Test_L_L_BFu9s()
{
  {
    init_simple_test("L_L_BFu9s");
    static STRUCT_IF_C L_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu9s)");
    check_field_offset(lv, v1, 0, "L_L_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu9s.v2");
    set_bf_and_test(lv, v3, 16, 0, 9, 1, "L_L_BFu9s");
    set_bf_and_test(lv, v3, 16, 0, 9, hide_ull(1LL<<8), "L_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu9s, L_L_BFu9s)
//============================================================================


struct  L_L_C  {
  __tsi64 v1;
  __tsi64 v2;
  char v3;
};
//SIG(1 L_L_C) C1{ FL[2] Fc}



static void Test_L_L_C()
{
  {
    init_simple_test("L_L_C");
    STRUCT_IF_C L_L_C lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_C)");
    check_field_offset(lv, v1, 0, "L_L_C.v1");
    check_field_offset(lv, v2, 8, "L_L_C.v2");
    check_field_offset(lv, v3, 16, "L_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_C, L_L_C)
//============================================================================


struct  L_L_D  {
  __tsi64 v1;
  __tsi64 v2;
  double v3;
};
//SIG(1 L_L_D) C1{ FL[3]}



static void Test_L_L_D()
{
  {
    init_simple_test("L_L_D");
    STRUCT_IF_C L_L_D lv;
    check2(sizeof(lv), 24, "sizeof(L_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_D)");
    check_field_offset(lv, v1, 0, "L_L_D.v1");
    check_field_offset(lv, v2, 8, "L_L_D.v2");
    check_field_offset(lv, v3, 16, "L_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_D, L_L_D)
//============================================================================


struct  L_L_F  {
  __tsi64 v1;
  __tsi64 v2;
  float v3;
};
//SIG(1 L_L_F) C1{ FL[2] Fi}



static void Test_L_L_F()
{
  {
    init_simple_test("L_L_F");
    STRUCT_IF_C L_L_F lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_F)");
    check_field_offset(lv, v1, 0, "L_L_F.v1");
    check_field_offset(lv, v2, 8, "L_L_F.v2");
    check_field_offset(lv, v3, 16, "L_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_F, L_L_F)
//============================================================================


struct  L_L_I  {
  __tsi64 v1;
  __tsi64 v2;
  int v3;
};
//SIG(1 L_L_I) C1{ FL[2] Fi}



static void Test_L_L_I()
{
  {
    init_simple_test("L_L_I");
    STRUCT_IF_C L_L_I lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_I)");
    check_field_offset(lv, v1, 0, "L_L_I.v1");
    check_field_offset(lv, v2, 8, "L_L_I.v2");
    check_field_offset(lv, v3, 16, "L_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_I, L_L_I)
//============================================================================


struct  L_L_Ip  {
  __tsi64 v1;
  __tsi64 v2;
  int *v3;
};
//SIG(1 L_L_Ip) C1{ FL[2] Fp}



static void Test_L_L_Ip()
{
  {
    init_simple_test("L_L_Ip");
    STRUCT_IF_C L_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Ip)");
    check_field_offset(lv, v1, 0, "L_L_Ip.v1");
    check_field_offset(lv, v2, 8, "L_L_Ip.v2");
    check_field_offset(lv, v3, 16, "L_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Ip, L_L_Ip)
//============================================================================


struct  L_L_L  {
  __tsi64 v1;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 L_L_L) C1{ FL[3]}



static void Test_L_L_L()
{
  {
    init_simple_test("L_L_L");
    STRUCT_IF_C L_L_L lv;
    check2(sizeof(lv), 24, "sizeof(L_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_L)");
    check_field_offset(lv, v1, 0, "L_L_L.v1");
    check_field_offset(lv, v2, 8, "L_L_L.v2");
    check_field_offset(lv, v3, 16, "L_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_L, L_L_L)
//============================================================================


struct  L_L_S  {
  __tsi64 v1;
  __tsi64 v2;
  short v3;
};
//SIG(1 L_L_S) C1{ FL[2] Fs}



static void Test_L_L_S()
{
  {
    init_simple_test("L_L_S");
    STRUCT_IF_C L_L_S lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_S)");
    check_field_offset(lv, v1, 0, "L_L_S.v1");
    check_field_offset(lv, v2, 8, "L_L_S.v2");
    check_field_offset(lv, v3, 16, "L_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_S, L_L_S)
//============================================================================


struct  L_L_Uc  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 L_L_Uc) C1{ FL[2] Fc}



static void Test_L_L_Uc()
{
  {
    init_simple_test("L_L_Uc");
    STRUCT_IF_C L_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Uc)");
    check_field_offset(lv, v1, 0, "L_L_Uc.v1");
    check_field_offset(lv, v2, 8, "L_L_Uc.v2");
    check_field_offset(lv, v3, 16, "L_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Uc, L_L_Uc)
//============================================================================


struct  L_L_Ui  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 L_L_Ui) C1{ FL[2] Fi}



static void Test_L_L_Ui()
{
  {
    init_simple_test("L_L_Ui");
    STRUCT_IF_C L_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Ui)");
    check_field_offset(lv, v1, 0, "L_L_Ui.v1");
    check_field_offset(lv, v2, 8, "L_L_Ui.v2");
    check_field_offset(lv, v3, 16, "L_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Ui, L_L_Ui)
//============================================================================


struct  L_L_Ul  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 L_L_Ul) C1{ FL[3]}



static void Test_L_L_Ul()
{
  {
    init_simple_test("L_L_Ul");
    STRUCT_IF_C L_L_Ul lv;
    check2(sizeof(lv), 24, "sizeof(L_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Ul)");
    check_field_offset(lv, v1, 0, "L_L_Ul.v1");
    check_field_offset(lv, v2, 8, "L_L_Ul.v2");
    check_field_offset(lv, v3, 16, "L_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Ul, L_L_Ul)
//============================================================================


struct  L_L_Us  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 L_L_Us) C1{ FL[2] Fs}



static void Test_L_L_Us()
{
  {
    init_simple_test("L_L_Us");
    STRUCT_IF_C L_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Us)");
    check_field_offset(lv, v1, 0, "L_L_Us.v1");
    check_field_offset(lv, v2, 8, "L_L_Us.v2");
    check_field_offset(lv, v3, 16, "L_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Us, L_L_Us)
//============================================================================


struct  L_L_Vp  {
  __tsi64 v1;
  __tsi64 v2;
  void *v3;
};
//SIG(1 L_L_Vp) C1{ FL[2] Fp}



static void Test_L_L_Vp()
{
  {
    init_simple_test("L_L_Vp");
    STRUCT_IF_C L_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_Vp)");
    check_field_offset(lv, v1, 0, "L_L_Vp.v1");
    check_field_offset(lv, v2, 8, "L_L_Vp.v2");
    check_field_offset(lv, v3, 16, "L_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_Vp, L_L_Vp)
//============================================================================


struct  L_S  {
  __tsi64 v1;
  short v2;
};
//SIG(1 L_S) C1{ FL Fs}



static void Test_L_S()
{
  {
    init_simple_test("L_S");
    STRUCT_IF_C L_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S)");
    check_field_offset(lv, v1, 0, "L_S.v1");
    check_field_offset(lv, v2, 8, "L_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S, L_S)
//============================================================================


struct  L_S_BFu15i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:15;
};
//SIG(1 L_S_BFu15i) C1{ FL Fs Fi:15}



static void Test_L_S_BFu15i()
{
  {
    init_simple_test("L_S_BFu15i");
    static STRUCT_IF_C L_S_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu15i)");
    check_field_offset(lv, v1, 0, "L_S_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_S_BFu15i");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu15i, L_S_BFu15i)
//============================================================================


struct  L_S_BFu15ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 L_S_BFu15ll) C1{ FL Fs FL:15}



static void Test_L_S_BFu15ll()
{
  {
    init_simple_test("L_S_BFu15ll");
    static STRUCT_IF_C L_S_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_S_BFu15ll");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu15ll, L_S_BFu15ll)
//============================================================================


struct  L_S_BFu15s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:15;
};
//SIG(1 L_S_BFu15s) C1{ FL Fs Fs:15}



static void Test_L_S_BFu15s()
{
  {
    init_simple_test("L_S_BFu15s");
    static STRUCT_IF_C L_S_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu15s)");
    check_field_offset(lv, v1, 0, "L_S_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_S_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu15s, L_S_BFu15s)
//============================================================================


struct  L_S_BFu16i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:16;
};
//SIG(1 L_S_BFu16i) C1{ FL Fs Fi:16}



static void Test_L_S_BFu16i()
{
  {
    init_simple_test("L_S_BFu16i");
    static STRUCT_IF_C L_S_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu16i)");
    check_field_offset(lv, v1, 0, "L_S_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_S_BFu16i");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu16i, L_S_BFu16i)
//============================================================================


struct  L_S_BFu16ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 L_S_BFu16ll) C1{ FL Fs FL:16}



static void Test_L_S_BFu16ll()
{
  {
    init_simple_test("L_S_BFu16ll");
    static STRUCT_IF_C L_S_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_S_BFu16ll");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu16ll, L_S_BFu16ll)
//============================================================================


struct  L_S_BFu16s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:16;
};
//SIG(1 L_S_BFu16s) C1{ FL Fs Fs:16}



static void Test_L_S_BFu16s()
{
  {
    init_simple_test("L_S_BFu16s");
    static STRUCT_IF_C L_S_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu16s)");
    check_field_offset(lv, v1, 0, "L_S_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_S_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu16s, L_S_BFu16s)
//============================================================================


struct  L_S_BFu17i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:17;
};
//SIG(1 L_S_BFu17i) C1{ FL Fs Fi:17}



static void Test_L_S_BFu17i()
{
  {
    init_simple_test("L_S_BFu17i");
    static STRUCT_IF_C L_S_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu17i)");
    check_field_offset(lv, v1, 0, "L_S_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 12, 0, 17, 1, "L_S_BFu17i");
    set_bf_and_test(lv, v3, 12, 0, 17, hide_ull(1LL<<16), "L_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu17i, L_S_BFu17i)
//============================================================================


struct  L_S_BFu17ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 L_S_BFu17ll) C1{ FL Fs FL:17}



static void Test_L_S_BFu17ll()
{
  {
    init_simple_test("L_S_BFu17ll");
    static STRUCT_IF_C L_S_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 17, 1, "L_S_BFu17ll");
    set_bf_and_test(lv, v3, 10, 0, 17, hide_ull(1LL<<16), "L_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu17ll, L_S_BFu17ll)
//============================================================================


struct  L_S_BFu1c  {
  __tsi64 v1;
  short v2;
  unsigned char v3:1;
};
//SIG(1 L_S_BFu1c) C1{ FL Fs Fc:1}



static void Test_L_S_BFu1c()
{
  {
    init_simple_test("L_S_BFu1c");
    static STRUCT_IF_C L_S_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu1c)");
    check_field_offset(lv, v1, 0, "L_S_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu1c, L_S_BFu1c)
//============================================================================


struct  L_S_BFu1i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:1;
};
//SIG(1 L_S_BFu1i) C1{ FL Fs Fi:1}



static void Test_L_S_BFu1i()
{
  {
    init_simple_test("L_S_BFu1i");
    static STRUCT_IF_C L_S_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu1i)");
    check_field_offset(lv, v1, 0, "L_S_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu1i, L_S_BFu1i)
//============================================================================


struct  L_S_BFu1ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 L_S_BFu1ll) C1{ FL Fs FL:1}



static void Test_L_S_BFu1ll()
{
  {
    init_simple_test("L_S_BFu1ll");
    static STRUCT_IF_C L_S_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu1ll, L_S_BFu1ll)
//============================================================================


struct  L_S_BFu1s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:1;
};
//SIG(1 L_S_BFu1s) C1{ FL Fs Fs:1}



static void Test_L_S_BFu1s()
{
  {
    init_simple_test("L_S_BFu1s");
    static STRUCT_IF_C L_S_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu1s)");
    check_field_offset(lv, v1, 0, "L_S_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 10, 0, 1, 1, "L_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu1s, L_S_BFu1s)
//============================================================================


struct  L_S_BFu31i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:31;
};
//SIG(1 L_S_BFu31i) C1{ FL Fs Fi:31}



static void Test_L_S_BFu31i()
{
  {
    init_simple_test("L_S_BFu31i");
    static STRUCT_IF_C L_S_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu31i)");
    check_field_offset(lv, v1, 0, "L_S_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_S_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu31i, L_S_BFu31i)
//============================================================================


struct  L_S_BFu31ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 L_S_BFu31ll) C1{ FL Fs FL:31}



static void Test_L_S_BFu31ll()
{
  {
    init_simple_test("L_S_BFu31ll");
    static STRUCT_IF_C L_S_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 31, 1, "L_S_BFu31ll");
    set_bf_and_test(lv, v3, 10, 0, 31, hide_ull(1LL<<30), "L_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu31ll, L_S_BFu31ll)
//============================================================================


struct  L_S_BFu32i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:32;
};
//SIG(1 L_S_BFu32i) C1{ FL Fs Fi:32}



static void Test_L_S_BFu32i()
{
  {
    init_simple_test("L_S_BFu32i");
    static STRUCT_IF_C L_S_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu32i)");
    check_field_offset(lv, v1, 0, "L_S_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_S_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu32i, L_S_BFu32i)
//============================================================================


struct  L_S_BFu32ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 L_S_BFu32ll) C1{ FL Fs FL:32}



static void Test_L_S_BFu32ll()
{
  {
    init_simple_test("L_S_BFu32ll");
    static STRUCT_IF_C L_S_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 32, 1, "L_S_BFu32ll");
    set_bf_and_test(lv, v3, 10, 0, 32, hide_ull(1LL<<31), "L_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu32ll, L_S_BFu32ll)
//============================================================================


struct  L_S_BFu33  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 L_S_BFu33) C1{ FL Fs FL:33}



static void Test_L_S_BFu33()
{
  {
    init_simple_test("L_S_BFu33");
    static STRUCT_IF_C L_S_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu33)");
    check_field_offset(lv, v1, 0, "L_S_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu33.v2");
    set_bf_and_test(lv, v3, 10, 0, 33, 1, "L_S_BFu33");
    set_bf_and_test(lv, v3, 10, 0, 33, hide_ull(1LL<<32), "L_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu33, L_S_BFu33)
//============================================================================


struct  L_S_BFu7c  {
  __tsi64 v1;
  short v2;
  unsigned char v3:7;
};
//SIG(1 L_S_BFu7c) C1{ FL Fs Fc:7}



static void Test_L_S_BFu7c()
{
  {
    init_simple_test("L_S_BFu7c");
    static STRUCT_IF_C L_S_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu7c)");
    check_field_offset(lv, v1, 0, "L_S_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_S_BFu7c");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu7c, L_S_BFu7c)
//============================================================================


struct  L_S_BFu7i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:7;
};
//SIG(1 L_S_BFu7i) C1{ FL Fs Fi:7}



static void Test_L_S_BFu7i()
{
  {
    init_simple_test("L_S_BFu7i");
    static STRUCT_IF_C L_S_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu7i)");
    check_field_offset(lv, v1, 0, "L_S_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_S_BFu7i");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu7i, L_S_BFu7i)
//============================================================================


struct  L_S_BFu7ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 L_S_BFu7ll) C1{ FL Fs FL:7}



static void Test_L_S_BFu7ll()
{
  {
    init_simple_test("L_S_BFu7ll");
    static STRUCT_IF_C L_S_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_S_BFu7ll");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu7ll, L_S_BFu7ll)
//============================================================================


struct  L_S_BFu7s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:7;
};
//SIG(1 L_S_BFu7s) C1{ FL Fs Fs:7}



static void Test_L_S_BFu7s()
{
  {
    init_simple_test("L_S_BFu7s");
    static STRUCT_IF_C L_S_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu7s)");
    check_field_offset(lv, v1, 0, "L_S_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 10, 0, 7, 1, "L_S_BFu7s");
    set_bf_and_test(lv, v3, 10, 0, 7, hide_ull(1LL<<6), "L_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu7s, L_S_BFu7s)
//============================================================================


struct  L_S_BFu8c  {
  __tsi64 v1;
  short v2;
  unsigned char v3:8;
};
//SIG(1 L_S_BFu8c) C1{ FL Fs Fc:8}



static void Test_L_S_BFu8c()
{
  {
    init_simple_test("L_S_BFu8c");
    static STRUCT_IF_C L_S_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu8c)");
    check_field_offset(lv, v1, 0, "L_S_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_S_BFu8c");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu8c, L_S_BFu8c)
//============================================================================


struct  L_S_BFu8i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:8;
};
//SIG(1 L_S_BFu8i) C1{ FL Fs Fi:8}



static void Test_L_S_BFu8i()
{
  {
    init_simple_test("L_S_BFu8i");
    static STRUCT_IF_C L_S_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu8i)");
    check_field_offset(lv, v1, 0, "L_S_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_S_BFu8i");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu8i, L_S_BFu8i)
//============================================================================


struct  L_S_BFu8ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 L_S_BFu8ll) C1{ FL Fs FL:8}



static void Test_L_S_BFu8ll()
{
  {
    init_simple_test("L_S_BFu8ll");
    static STRUCT_IF_C L_S_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_S_BFu8ll");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu8ll, L_S_BFu8ll)
//============================================================================


struct  L_S_BFu8s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:8;
};
//SIG(1 L_S_BFu8s) C1{ FL Fs Fs:8}



static void Test_L_S_BFu8s()
{
  {
    init_simple_test("L_S_BFu8s");
    static STRUCT_IF_C L_S_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu8s)");
    check_field_offset(lv, v1, 0, "L_S_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 10, 0, 8, 1, "L_S_BFu8s");
    set_bf_and_test(lv, v3, 10, 0, 8, hide_ull(1LL<<7), "L_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu8s, L_S_BFu8s)
//============================================================================


struct  L_S_BFu9i  {
  __tsi64 v1;
  short v2;
  unsigned int v3:9;
};
//SIG(1 L_S_BFu9i) C1{ FL Fs Fi:9}



static void Test_L_S_BFu9i()
{
  {
    init_simple_test("L_S_BFu9i");
    static STRUCT_IF_C L_S_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu9i)");
    check_field_offset(lv, v1, 0, "L_S_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_S_BFu9i");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu9i, L_S_BFu9i)
//============================================================================


struct  L_S_BFu9ll  {
  __tsi64 v1;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 L_S_BFu9ll) C1{ FL Fs FL:9}



static void Test_L_S_BFu9ll()
{
  {
    init_simple_test("L_S_BFu9ll");
    static STRUCT_IF_C L_S_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_S_BFu9ll");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu9ll, L_S_BFu9ll)
//============================================================================


struct  L_S_BFu9s  {
  __tsi64 v1;
  short v2;
  unsigned short v3:9;
};
//SIG(1 L_S_BFu9s) C1{ FL Fs Fs:9}



static void Test_L_S_BFu9s()
{
  {
    init_simple_test("L_S_BFu9s");
    static STRUCT_IF_C L_S_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu9s)");
    check_field_offset(lv, v1, 0, "L_S_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_S_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu9s, L_S_BFu9s)
//============================================================================


struct  L_S_C  {
  __tsi64 v1;
  short v2;
  char v3;
};
//SIG(1 L_S_C) C1{ FL Fs Fc}



static void Test_L_S_C()
{
  {
    init_simple_test("L_S_C");
    STRUCT_IF_C L_S_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_C)");
    check_field_offset(lv, v1, 0, "L_S_C.v1");
    check_field_offset(lv, v2, 8, "L_S_C.v2");
    check_field_offset(lv, v3, 10, "L_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_C, L_S_C)
//============================================================================


struct  L_S_D  {
  __tsi64 v1;
  short v2;
  double v3;
};
//SIG(1 L_S_D) C1{ FL Fs FL}



static void Test_L_S_D()
{
  {
    init_simple_test("L_S_D");
    STRUCT_IF_C L_S_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_D)");
    check_field_offset(lv, v1, 0, "L_S_D.v1");
    check_field_offset(lv, v2, 8, "L_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_D, L_S_D)
//============================================================================


struct  L_S_F  {
  __tsi64 v1;
  short v2;
  float v3;
};
//SIG(1 L_S_F) C1{ FL Fs Fi}



static void Test_L_S_F()
{
  {
    init_simple_test("L_S_F");
    STRUCT_IF_C L_S_F lv;
    check2(sizeof(lv), 16, "sizeof(L_S_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_F)");
    check_field_offset(lv, v1, 0, "L_S_F.v1");
    check_field_offset(lv, v2, 8, "L_S_F.v2");
    check_field_offset(lv, v3, 12, "L_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_F, L_S_F)
//============================================================================


struct  L_S_I  {
  __tsi64 v1;
  short v2;
  int v3;
};
//SIG(1 L_S_I) C1{ FL Fs Fi}



static void Test_L_S_I()
{
  {
    init_simple_test("L_S_I");
    STRUCT_IF_C L_S_I lv;
    check2(sizeof(lv), 16, "sizeof(L_S_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_I)");
    check_field_offset(lv, v1, 0, "L_S_I.v1");
    check_field_offset(lv, v2, 8, "L_S_I.v2");
    check_field_offset(lv, v3, 12, "L_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_I, L_S_I)
//============================================================================


struct  L_S_Ip  {
  __tsi64 v1;
  short v2;
  int *v3;
};
//SIG(1 L_S_Ip) C1{ FL Fs Fp}



static void Test_L_S_Ip()
{
  {
    init_simple_test("L_S_Ip");
    STRUCT_IF_C L_S_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Ip)");
    check_field_offset(lv, v1, 0, "L_S_Ip.v1");
    check_field_offset(lv, v2, 8, "L_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Ip, L_S_Ip)
//============================================================================


struct  L_S_L  {
  __tsi64 v1;
  short v2;
  __tsi64 v3;
};
//SIG(1 L_S_L) C1{ FL Fs FL}



static void Test_L_S_L()
{
  {
    init_simple_test("L_S_L");
    STRUCT_IF_C L_S_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_L)");
    check_field_offset(lv, v1, 0, "L_S_L.v1");
    check_field_offset(lv, v2, 8, "L_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_L, L_S_L)
//============================================================================


struct  L_S_S  {
  __tsi64 v1;
  short v2;
  short v3;
};
//SIG(1 L_S_S) C1{ FL Fs[2]}



static void Test_L_S_S()
{
  {
    init_simple_test("L_S_S");
    STRUCT_IF_C L_S_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_S)");
    check_field_offset(lv, v1, 0, "L_S_S.v1");
    check_field_offset(lv, v2, 8, "L_S_S.v2");
    check_field_offset(lv, v3, 10, "L_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_S, L_S_S)
//============================================================================


struct  L_S_Uc  {
  __tsi64 v1;
  short v2;
  unsigned char v3;
};
//SIG(1 L_S_Uc) C1{ FL Fs Fc}



static void Test_L_S_Uc()
{
  {
    init_simple_test("L_S_Uc");
    STRUCT_IF_C L_S_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Uc)");
    check_field_offset(lv, v1, 0, "L_S_Uc.v1");
    check_field_offset(lv, v2, 8, "L_S_Uc.v2");
    check_field_offset(lv, v3, 10, "L_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Uc, L_S_Uc)
//============================================================================


struct  L_S_Ui  {
  __tsi64 v1;
  short v2;
  unsigned int v3;
};
//SIG(1 L_S_Ui) C1{ FL Fs Fi}



static void Test_L_S_Ui()
{
  {
    init_simple_test("L_S_Ui");
    STRUCT_IF_C L_S_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_S_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Ui)");
    check_field_offset(lv, v1, 0, "L_S_Ui.v1");
    check_field_offset(lv, v2, 8, "L_S_Ui.v2");
    check_field_offset(lv, v3, 12, "L_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Ui, L_S_Ui)
//============================================================================


struct  L_S_Ul  {
  __tsi64 v1;
  short v2;
  __tsu64 v3;
};
//SIG(1 L_S_Ul) C1{ FL Fs FL}



static void Test_L_S_Ul()
{
  {
    init_simple_test("L_S_Ul");
    STRUCT_IF_C L_S_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Ul)");
    check_field_offset(lv, v1, 0, "L_S_Ul.v1");
    check_field_offset(lv, v2, 8, "L_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Ul, L_S_Ul)
//============================================================================


struct  L_S_Us  {
  __tsi64 v1;
  short v2;
  unsigned short v3;
};
//SIG(1 L_S_Us) C1{ FL Fs[2]}



static void Test_L_S_Us()
{
  {
    init_simple_test("L_S_Us");
    STRUCT_IF_C L_S_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Us)");
    check_field_offset(lv, v1, 0, "L_S_Us.v1");
    check_field_offset(lv, v2, 8, "L_S_Us.v2");
    check_field_offset(lv, v3, 10, "L_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Us, L_S_Us)
//============================================================================


struct  L_S_Vp  {
  __tsi64 v1;
  short v2;
  void *v3;
};
//SIG(1 L_S_Vp) C1{ FL Fs Fp}



static void Test_L_S_Vp()
{
  {
    init_simple_test("L_S_Vp");
    STRUCT_IF_C L_S_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_Vp)");
    check_field_offset(lv, v1, 0, "L_S_Vp.v1");
    check_field_offset(lv, v2, 8, "L_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_Vp, L_S_Vp)
//============================================================================


struct  L_Uc  {
  __tsi64 v1;
  unsigned char v2;
};
//SIG(1 L_Uc) C1{ FL Fc}



static void Test_L_Uc()
{
  {
    init_simple_test("L_Uc");
    STRUCT_IF_C L_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc)");
    check_field_offset(lv, v1, 0, "L_Uc.v1");
    check_field_offset(lv, v2, 8, "L_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc, L_Uc)
//============================================================================


struct  L_Uc_BFu15i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 L_Uc_BFu15i) C1{ FL Fc Fi:15}



static void Test_L_Uc_BFu15i()
{
  {
    init_simple_test("L_Uc_BFu15i");
    static STRUCT_IF_C L_Uc_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_Uc_BFu15i");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu15i, L_Uc_BFu15i)
//============================================================================


struct  L_Uc_BFu15ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 L_Uc_BFu15ll) C1{ FL Fc FL:15}



static void Test_L_Uc_BFu15ll()
{
  {
    init_simple_test("L_Uc_BFu15ll");
    static STRUCT_IF_C L_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 15, 1, "L_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 9, 0, 15, hide_ull(1LL<<14), "L_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu15ll, L_Uc_BFu15ll)
//============================================================================


struct  L_Uc_BFu15s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 L_Uc_BFu15s) C1{ FL Fc Fs:15}



static void Test_L_Uc_BFu15s()
{
  {
    init_simple_test("L_Uc_BFu15s");
    static STRUCT_IF_C L_Uc_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 10, 0, 15, 1, "L_Uc_BFu15s");
    set_bf_and_test(lv, v3, 10, 0, 15, hide_ull(1LL<<14), "L_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu15s, L_Uc_BFu15s)
//============================================================================


struct  L_Uc_BFu16i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 L_Uc_BFu16i) C1{ FL Fc Fi:16}



static void Test_L_Uc_BFu16i()
{
  {
    init_simple_test("L_Uc_BFu16i");
    static STRUCT_IF_C L_Uc_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu16i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_Uc_BFu16i");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu16i, L_Uc_BFu16i)
//============================================================================


struct  L_Uc_BFu16ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 L_Uc_BFu16ll) C1{ FL Fc FL:16}



static void Test_L_Uc_BFu16ll()
{
  {
    init_simple_test("L_Uc_BFu16ll");
    static STRUCT_IF_C L_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 16, 1, "L_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 9, 0, 16, hide_ull(1LL<<15), "L_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu16ll, L_Uc_BFu16ll)
//============================================================================


struct  L_Uc_BFu16s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 L_Uc_BFu16s) C1{ FL Fc Fs:16}



static void Test_L_Uc_BFu16s()
{
  {
    init_simple_test("L_Uc_BFu16s");
    static STRUCT_IF_C L_Uc_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu16s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 10, 0, 16, 1, "L_Uc_BFu16s");
    set_bf_and_test(lv, v3, 10, 0, 16, hide_ull(1LL<<15), "L_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu16s, L_Uc_BFu16s)
//============================================================================


struct  L_Uc_BFu17i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 L_Uc_BFu17i) C1{ FL Fc Fi:17}



static void Test_L_Uc_BFu17i()
{
  {
    init_simple_test("L_Uc_BFu17i");
    static STRUCT_IF_C L_Uc_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu17i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_Uc_BFu17i");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu17i, L_Uc_BFu17i)
//============================================================================


struct  L_Uc_BFu17ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 L_Uc_BFu17ll) C1{ FL Fc FL:17}



static void Test_L_Uc_BFu17ll()
{
  {
    init_simple_test("L_Uc_BFu17ll");
    static STRUCT_IF_C L_Uc_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 17, 1, "L_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 9, 0, 17, hide_ull(1LL<<16), "L_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu17ll, L_Uc_BFu17ll)
//============================================================================


struct  L_Uc_BFu1c  {
  __tsi64 v1;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 L_Uc_BFu1c) C1{ FL Fc Fc:1}



static void Test_L_Uc_BFu1c()
{
  {
    init_simple_test("L_Uc_BFu1c");
    static STRUCT_IF_C L_Uc_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu1c.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu1c, L_Uc_BFu1c)
//============================================================================


struct  L_Uc_BFu1i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 L_Uc_BFu1i) C1{ FL Fc Fi:1}



static void Test_L_Uc_BFu1i()
{
  {
    init_simple_test("L_Uc_BFu1i");
    static STRUCT_IF_C L_Uc_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu1i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu1i, L_Uc_BFu1i)
//============================================================================


struct  L_Uc_BFu1ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 L_Uc_BFu1ll) C1{ FL Fc FL:1}



static void Test_L_Uc_BFu1ll()
{
  {
    init_simple_test("L_Uc_BFu1ll");
    static STRUCT_IF_C L_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu1ll, L_Uc_BFu1ll)
//============================================================================


struct  L_Uc_BFu1s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 L_Uc_BFu1s) C1{ FL Fc Fs:1}



static void Test_L_Uc_BFu1s()
{
  {
    init_simple_test("L_Uc_BFu1s");
    static STRUCT_IF_C L_Uc_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu1s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 9, 0, 1, 1, "L_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu1s, L_Uc_BFu1s)
//============================================================================


struct  L_Uc_BFu31i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 L_Uc_BFu31i) C1{ FL Fc Fi:31}



static void Test_L_Uc_BFu31i()
{
  {
    init_simple_test("L_Uc_BFu31i");
    static STRUCT_IF_C L_Uc_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu31i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 12, 0, 31, 1, "L_Uc_BFu31i");
    set_bf_and_test(lv, v3, 12, 0, 31, hide_ull(1LL<<30), "L_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu31i, L_Uc_BFu31i)
//============================================================================


struct  L_Uc_BFu31ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 L_Uc_BFu31ll) C1{ FL Fc FL:31}



static void Test_L_Uc_BFu31ll()
{
  {
    init_simple_test("L_Uc_BFu31ll");
    static STRUCT_IF_C L_Uc_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 31, 1, "L_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 9, 0, 31, hide_ull(1LL<<30), "L_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu31ll, L_Uc_BFu31ll)
//============================================================================


struct  L_Uc_BFu32i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 L_Uc_BFu32i) C1{ FL Fc Fi:32}



static void Test_L_Uc_BFu32i()
{
  {
    init_simple_test("L_Uc_BFu32i");
    static STRUCT_IF_C L_Uc_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu32i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 12, 0, 32, 1, "L_Uc_BFu32i");
    set_bf_and_test(lv, v3, 12, 0, 32, hide_ull(1LL<<31), "L_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu32i, L_Uc_BFu32i)
//============================================================================


struct  L_Uc_BFu32ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 L_Uc_BFu32ll) C1{ FL Fc FL:32}



static void Test_L_Uc_BFu32ll()
{
  {
    init_simple_test("L_Uc_BFu32ll");
    static STRUCT_IF_C L_Uc_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 32, 1, "L_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 9, 0, 32, hide_ull(1LL<<31), "L_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu32ll, L_Uc_BFu32ll)
//============================================================================


struct  L_Uc_BFu33  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 L_Uc_BFu33) C1{ FL Fc FL:33}



static void Test_L_Uc_BFu33()
{
  {
    init_simple_test("L_Uc_BFu33");
    static STRUCT_IF_C L_Uc_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu33.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 9, 0, 33, 1, "L_Uc_BFu33");
    set_bf_and_test(lv, v3, 9, 0, 33, hide_ull(1LL<<32), "L_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu33, L_Uc_BFu33)
//============================================================================


struct  L_Uc_BFu7c  {
  __tsi64 v1;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 L_Uc_BFu7c) C1{ FL Fc Fc:7}



static void Test_L_Uc_BFu7c()
{
  {
    init_simple_test("L_Uc_BFu7c");
    static STRUCT_IF_C L_Uc_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu7c.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_Uc_BFu7c");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu7c, L_Uc_BFu7c)
//============================================================================


struct  L_Uc_BFu7i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 L_Uc_BFu7i) C1{ FL Fc Fi:7}



static void Test_L_Uc_BFu7i()
{
  {
    init_simple_test("L_Uc_BFu7i");
    static STRUCT_IF_C L_Uc_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu7i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_Uc_BFu7i");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu7i, L_Uc_BFu7i)
//============================================================================


struct  L_Uc_BFu7ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 L_Uc_BFu7ll) C1{ FL Fc FL:7}



static void Test_L_Uc_BFu7ll()
{
  {
    init_simple_test("L_Uc_BFu7ll");
    static STRUCT_IF_C L_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu7ll, L_Uc_BFu7ll)
//============================================================================


struct  L_Uc_BFu7s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 L_Uc_BFu7s) C1{ FL Fc Fs:7}



static void Test_L_Uc_BFu7s()
{
  {
    init_simple_test("L_Uc_BFu7s");
    static STRUCT_IF_C L_Uc_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu7s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 9, 0, 7, 1, "L_Uc_BFu7s");
    set_bf_and_test(lv, v3, 9, 0, 7, hide_ull(1LL<<6), "L_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu7s, L_Uc_BFu7s)
//============================================================================


struct  L_Uc_BFu8c  {
  __tsi64 v1;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 L_Uc_BFu8c) C1{ FL Fc Fc:8}



static void Test_L_Uc_BFu8c()
{
  {
    init_simple_test("L_Uc_BFu8c");
    static STRUCT_IF_C L_Uc_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu8c.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_Uc_BFu8c");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu8c, L_Uc_BFu8c)
//============================================================================


struct  L_Uc_BFu8i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 L_Uc_BFu8i) C1{ FL Fc Fi:8}



static void Test_L_Uc_BFu8i()
{
  {
    init_simple_test("L_Uc_BFu8i");
    static STRUCT_IF_C L_Uc_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu8i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_Uc_BFu8i");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu8i, L_Uc_BFu8i)
//============================================================================


struct  L_Uc_BFu8ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 L_Uc_BFu8ll) C1{ FL Fc FL:8}



static void Test_L_Uc_BFu8ll()
{
  {
    init_simple_test("L_Uc_BFu8ll");
    static STRUCT_IF_C L_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu8ll, L_Uc_BFu8ll)
//============================================================================


struct  L_Uc_BFu8s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 L_Uc_BFu8s) C1{ FL Fc Fs:8}



static void Test_L_Uc_BFu8s()
{
  {
    init_simple_test("L_Uc_BFu8s");
    static STRUCT_IF_C L_Uc_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu8s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 9, 0, 8, 1, "L_Uc_BFu8s");
    set_bf_and_test(lv, v3, 9, 0, 8, hide_ull(1LL<<7), "L_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu8s, L_Uc_BFu8s)
//============================================================================


struct  L_Uc_BFu9i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 L_Uc_BFu9i) C1{ FL Fc Fi:9}



static void Test_L_Uc_BFu9i()
{
  {
    init_simple_test("L_Uc_BFu9i");
    static STRUCT_IF_C L_Uc_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu9i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_Uc_BFu9i");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu9i, L_Uc_BFu9i)
//============================================================================


struct  L_Uc_BFu9ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 L_Uc_BFu9ll) C1{ FL Fc FL:9}



static void Test_L_Uc_BFu9ll()
{
  {
    init_simple_test("L_Uc_BFu9ll");
    static STRUCT_IF_C L_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 9, 0, 9, 1, "L_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 9, 0, 9, hide_ull(1LL<<8), "L_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu9ll, L_Uc_BFu9ll)
//============================================================================


struct  L_Uc_BFu9s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 L_Uc_BFu9s) C1{ FL Fc Fs:9}



static void Test_L_Uc_BFu9s()
{
  {
    init_simple_test("L_Uc_BFu9s");
    static STRUCT_IF_C L_Uc_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu9s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 10, 0, 9, 1, "L_Uc_BFu9s");
    set_bf_and_test(lv, v3, 10, 0, 9, hide_ull(1LL<<8), "L_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu9s, L_Uc_BFu9s)
//============================================================================


struct  L_Uc_C  {
  __tsi64 v1;
  unsigned char v2;
  char v3;
};
//SIG(1 L_Uc_C) C1{ FL Fc[2]}



static void Test_L_Uc_C()
{
  {
    init_simple_test("L_Uc_C");
    STRUCT_IF_C L_Uc_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_C)");
    check_field_offset(lv, v1, 0, "L_Uc_C.v1");
    check_field_offset(lv, v2, 8, "L_Uc_C.v2");
    check_field_offset(lv, v3, 9, "L_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_C, L_Uc_C)
//============================================================================


struct  L_Uc_D  {
  __tsi64 v1;
  unsigned char v2;
  double v3;
};
//SIG(1 L_Uc_D) C1{ FL Fc FL}



static void Test_L_Uc_D()
{
  {
    init_simple_test("L_Uc_D");
    STRUCT_IF_C L_Uc_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_D)");
    check_field_offset(lv, v1, 0, "L_Uc_D.v1");
    check_field_offset(lv, v2, 8, "L_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_D, L_Uc_D)
//============================================================================


struct  L_Uc_F  {
  __tsi64 v1;
  unsigned char v2;
  float v3;
};
//SIG(1 L_Uc_F) C1{ FL Fc Fi}



static void Test_L_Uc_F()
{
  {
    init_simple_test("L_Uc_F");
    STRUCT_IF_C L_Uc_F lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_F)");
    check_field_offset(lv, v1, 0, "L_Uc_F.v1");
    check_field_offset(lv, v2, 8, "L_Uc_F.v2");
    check_field_offset(lv, v3, 12, "L_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_F, L_Uc_F)
//============================================================================


struct  L_Uc_I  {
  __tsi64 v1;
  unsigned char v2;
  int v3;
};
//SIG(1 L_Uc_I) C1{ FL Fc Fi}



static void Test_L_Uc_I()
{
  {
    init_simple_test("L_Uc_I");
    STRUCT_IF_C L_Uc_I lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_I)");
    check_field_offset(lv, v1, 0, "L_Uc_I.v1");
    check_field_offset(lv, v2, 8, "L_Uc_I.v2");
    check_field_offset(lv, v3, 12, "L_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_I, L_Uc_I)
//============================================================================


struct  L_Uc_Ip  {
  __tsi64 v1;
  unsigned char v2;
  int *v3;
};
//SIG(1 L_Uc_Ip) C1{ FL Fc Fp}



static void Test_L_Uc_Ip()
{
  {
    init_simple_test("L_Uc_Ip");
    STRUCT_IF_C L_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Ip)");
    check_field_offset(lv, v1, 0, "L_Uc_Ip.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Ip, L_Uc_Ip)
//============================================================================


struct  L_Uc_L  {
  __tsi64 v1;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 L_Uc_L) C1{ FL Fc FL}



static void Test_L_Uc_L()
{
  {
    init_simple_test("L_Uc_L");
    STRUCT_IF_C L_Uc_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_L)");
    check_field_offset(lv, v1, 0, "L_Uc_L.v1");
    check_field_offset(lv, v2, 8, "L_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_L, L_Uc_L)
//============================================================================


struct  L_Uc_S  {
  __tsi64 v1;
  unsigned char v2;
  short v3;
};
//SIG(1 L_Uc_S) C1{ FL Fc Fs}



static void Test_L_Uc_S()
{
  {
    init_simple_test("L_Uc_S");
    STRUCT_IF_C L_Uc_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_S)");
    check_field_offset(lv, v1, 0, "L_Uc_S.v1");
    check_field_offset(lv, v2, 8, "L_Uc_S.v2");
    check_field_offset(lv, v3, 10, "L_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_S, L_Uc_S)
//============================================================================


struct  L_Uc_Uc  {
  __tsi64 v1;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 L_Uc_Uc) C1{ FL Fc[2]}



static void Test_L_Uc_Uc()
{
  {
    init_simple_test("L_Uc_Uc");
    STRUCT_IF_C L_Uc_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Uc)");
    check_field_offset(lv, v1, 0, "L_Uc_Uc.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Uc.v2");
    check_field_offset(lv, v3, 9, "L_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Uc, L_Uc_Uc)
//============================================================================


struct  L_Uc_Ui  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 L_Uc_Ui) C1{ FL Fc Fi}



static void Test_L_Uc_Ui()
{
  {
    init_simple_test("L_Uc_Ui");
    STRUCT_IF_C L_Uc_Ui lv;
    check2(sizeof(lv), 16, "sizeof(L_Uc_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Ui)");
    check_field_offset(lv, v1, 0, "L_Uc_Ui.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Ui.v2");
    check_field_offset(lv, v3, 12, "L_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Ui, L_Uc_Ui)
//============================================================================


struct  L_Uc_Ul  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 L_Uc_Ul) C1{ FL Fc FL}



static void Test_L_Uc_Ul()
{
  {
    init_simple_test("L_Uc_Ul");
    STRUCT_IF_C L_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(L_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Ul)");
    check_field_offset(lv, v1, 0, "L_Uc_Ul.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Ul, L_Uc_Ul)
//============================================================================


struct  L_Uc_Us  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 L_Uc_Us) C1{ FL Fc Fs}



static void Test_L_Uc_Us()
{
  {
    init_simple_test("L_Uc_Us");
    STRUCT_IF_C L_Uc_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Us)");
    check_field_offset(lv, v1, 0, "L_Uc_Us.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Us.v2");
    check_field_offset(lv, v3, 10, "L_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Us, L_Uc_Us)
//============================================================================


struct  L_Uc_Vp  {
  __tsi64 v1;
  unsigned char v2;
  void *v3;
};
//SIG(1 L_Uc_Vp) C1{ FL Fc Fp}



static void Test_L_Uc_Vp()
{
  {
    init_simple_test("L_Uc_Vp");
    STRUCT_IF_C L_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(L_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_Vp)");
    check_field_offset(lv, v1, 0, "L_Uc_Vp.v1");
    check_field_offset(lv, v2, 8, "L_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "L_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_Vp, L_Uc_Vp)
//============================================================================


struct  L_Ui  {
  __tsi64 v1;
  unsigned int v2;
};
//SIG(1 L_Ui) C1{ FL Fi}



static void Test_L_Ui()
{
  {
    init_simple_test("L_Ui");
    STRUCT_IF_C L_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui)");
    check_field_offset(lv, v1, 0, "L_Ui.v1");
    check_field_offset(lv, v2, 8, "L_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui, L_Ui)
//============================================================================


struct  L_Ui_BFu15i  {
  __tsi64 v1;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 L_Ui_BFu15i) C1{ FL Fi Fi:15}



static void Test_L_Ui_BFu15i()
{
  {
    init_simple_test("L_Ui_BFu15i");
    static STRUCT_IF_C L_Ui_BFu15i lv;
    check2(sizeof(lv), 16, "sizeof(L_Ui_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu15i.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_Ui_BFu15i");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu15i, L_Ui_BFu15i)
//============================================================================


struct  L_Ui_BFu15ll  {
  __tsi64 v1;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 L_Ui_BFu15ll) C1{ FL Fi FL:15}



static void Test_L_Ui_BFu15ll()
{
  {
    init_simple_test("L_Ui_BFu15ll");
    static STRUCT_IF_C L_Ui_BFu15ll lv;
    check2(sizeof(lv), 16, "sizeof(L_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu15ll, L_Ui_BFu15ll)
//============================================================================


struct  L_Ui_BFu15s  {
  __tsi64 v1;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 L_Ui_BFu15s) C1{ FL Fi Fs:15}



static void Test_L_Ui_BFu15s()
{
  {
    init_simple_test("L_Ui_BFu15s");
    static STRUCT_IF_C L_Ui_BFu15s lv;
    check2(sizeof(lv), 16, "sizeof(L_Ui_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu15s.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 12, 0, 15, 1, "L_Ui_BFu15s");
    set_bf_and_test(lv, v3, 12, 0, 15, hide_ull(1LL<<14), "L_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu15s, L_Ui_BFu15s)
//============================================================================

