// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: c_compiler -c %s -I "common" -o %t2.o
// RUN: linker -o %t1%exeext  %t1.o %t2.o
// RUN: runtool %t1%exeext | checker "TEST PASSED"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"

struct  BFu16s_Uc_BFu17i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Uc_BFu17i) C1{ Fs:16 Fc Fi:17}



static void Test_BFu16s_Uc_BFu17i()
{
  {
    init_simple_test("BFu16s_Uc_BFu17i");
    static STRUCT_IF_C BFu16s_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu17i, BFu16s_Uc_BFu17i)
//============================================================================


struct  BFu16s_Uc_BFu17ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Uc_BFu17ll) C1{ Fs:16 Fc FL:17}



static void Test_BFu16s_Uc_BFu17ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu17ll");
    static STRUCT_IF_C BFu16s_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu17ll, BFu16s_Uc_BFu17ll)
//============================================================================


struct  BFu16s_Uc_BFu1c  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Uc_BFu1c) C1{ Fs:16 Fc Fc:1}



static void Test_BFu16s_Uc_BFu1c()
{
  {
    init_simple_test("BFu16s_Uc_BFu1c");
    static STRUCT_IF_C BFu16s_Uc_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu1c, BFu16s_Uc_BFu1c)
//============================================================================


struct  BFu16s_Uc_BFu1i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Uc_BFu1i) C1{ Fs:16 Fc Fi:1}



static void Test_BFu16s_Uc_BFu1i()
{
  {
    init_simple_test("BFu16s_Uc_BFu1i");
    static STRUCT_IF_C BFu16s_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu1i, BFu16s_Uc_BFu1i)
//============================================================================


struct  BFu16s_Uc_BFu1ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Uc_BFu1ll) C1{ Fs:16 Fc FL:1}



static void Test_BFu16s_Uc_BFu1ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu1ll");
    static STRUCT_IF_C BFu16s_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu1ll, BFu16s_Uc_BFu1ll)
//============================================================================


struct  BFu16s_Uc_BFu1s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Uc_BFu1s) C1{ Fs:16 Fc Fs:1}



static void Test_BFu16s_Uc_BFu1s()
{
  {
    init_simple_test("BFu16s_Uc_BFu1s");
    static STRUCT_IF_C BFu16s_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu1s, BFu16s_Uc_BFu1s)
//============================================================================


struct  BFu16s_Uc_BFu31i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Uc_BFu31i) C1{ Fs:16 Fc Fi:31}



static void Test_BFu16s_Uc_BFu31i()
{
  {
    init_simple_test("BFu16s_Uc_BFu31i");
    static STRUCT_IF_C BFu16s_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu31i, BFu16s_Uc_BFu31i)
//============================================================================


struct  BFu16s_Uc_BFu31ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Uc_BFu31ll) C1{ Fs:16 Fc FL:31}



static void Test_BFu16s_Uc_BFu31ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu31ll");
    static STRUCT_IF_C BFu16s_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu31ll, BFu16s_Uc_BFu31ll)
//============================================================================


struct  BFu16s_Uc_BFu32i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Uc_BFu32i) C1{ Fs:16 Fc Fi:32}



static void Test_BFu16s_Uc_BFu32i()
{
  {
    init_simple_test("BFu16s_Uc_BFu32i");
    static STRUCT_IF_C BFu16s_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu32i, BFu16s_Uc_BFu32i)
//============================================================================


struct  BFu16s_Uc_BFu32ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Uc_BFu32ll) C1{ Fs:16 Fc FL:32}



static void Test_BFu16s_Uc_BFu32ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu32ll");
    static STRUCT_IF_C BFu16s_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu32ll, BFu16s_Uc_BFu32ll)
//============================================================================


struct  BFu16s_Uc_BFu33  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Uc_BFu33) C1{ Fs:16 Fc FL:33}



static void Test_BFu16s_Uc_BFu33()
{
  {
    init_simple_test("BFu16s_Uc_BFu33");
    static STRUCT_IF_C BFu16s_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu33");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_Uc_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu33, BFu16s_Uc_BFu33)
//============================================================================


struct  BFu16s_Uc_BFu7c  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Uc_BFu7c) C1{ Fs:16 Fc Fc:7}



static void Test_BFu16s_Uc_BFu7c()
{
  {
    init_simple_test("BFu16s_Uc_BFu7c");
    static STRUCT_IF_C BFu16s_Uc_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_Uc_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu7c, BFu16s_Uc_BFu7c)
//============================================================================


struct  BFu16s_Uc_BFu7i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Uc_BFu7i) C1{ Fs:16 Fc Fi:7}



static void Test_BFu16s_Uc_BFu7i()
{
  {
    init_simple_test("BFu16s_Uc_BFu7i");
    static STRUCT_IF_C BFu16s_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_Uc_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu7i, BFu16s_Uc_BFu7i)
//============================================================================


struct  BFu16s_Uc_BFu7ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Uc_BFu7ll) C1{ Fs:16 Fc FL:7}



static void Test_BFu16s_Uc_BFu7ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu7ll");
    static STRUCT_IF_C BFu16s_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu7ll, BFu16s_Uc_BFu7ll)
//============================================================================


struct  BFu16s_Uc_BFu7s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Uc_BFu7s) C1{ Fs:16 Fc Fs:7}



static void Test_BFu16s_Uc_BFu7s()
{
  {
    init_simple_test("BFu16s_Uc_BFu7s");
    static STRUCT_IF_C BFu16s_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_Uc_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu7s, BFu16s_Uc_BFu7s)
//============================================================================


struct  BFu16s_Uc_BFu8c  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Uc_BFu8c) C1{ Fs:16 Fc Fc:8}



static void Test_BFu16s_Uc_BFu8c()
{
  {
    init_simple_test("BFu16s_Uc_BFu8c");
    static STRUCT_IF_C BFu16s_Uc_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_Uc_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu8c, BFu16s_Uc_BFu8c)
//============================================================================


struct  BFu16s_Uc_BFu8i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Uc_BFu8i) C1{ Fs:16 Fc Fi:8}



static void Test_BFu16s_Uc_BFu8i()
{
  {
    init_simple_test("BFu16s_Uc_BFu8i");
    static STRUCT_IF_C BFu16s_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_Uc_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu8i, BFu16s_Uc_BFu8i)
//============================================================================


struct  BFu16s_Uc_BFu8ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Uc_BFu8ll) C1{ Fs:16 Fc FL:8}



static void Test_BFu16s_Uc_BFu8ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu8ll");
    static STRUCT_IF_C BFu16s_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu8ll, BFu16s_Uc_BFu8ll)
//============================================================================


struct  BFu16s_Uc_BFu8s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Uc_BFu8s) C1{ Fs:16 Fc Fs:8}



static void Test_BFu16s_Uc_BFu8s()
{
  {
    init_simple_test("BFu16s_Uc_BFu8s");
    static STRUCT_IF_C BFu16s_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_Uc_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu8s, BFu16s_Uc_BFu8s)
//============================================================================


struct  BFu16s_Uc_BFu9i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Uc_BFu9i) C1{ Fs:16 Fc Fi:9}



static void Test_BFu16s_Uc_BFu9i()
{
  {
    init_simple_test("BFu16s_Uc_BFu9i");
    static STRUCT_IF_C BFu16s_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_Uc_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu9i, BFu16s_Uc_BFu9i)
//============================================================================


struct  BFu16s_Uc_BFu9ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Uc_BFu9ll) C1{ Fs:16 Fc FL:9}



static void Test_BFu16s_Uc_BFu9ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu9ll");
    static STRUCT_IF_C BFu16s_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu9ll, BFu16s_Uc_BFu9ll)
//============================================================================


struct  BFu16s_Uc_BFu9s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Uc_BFu9s) C1{ Fs:16 Fc Fs:9}



static void Test_BFu16s_Uc_BFu9s()
{
  {
    init_simple_test("BFu16s_Uc_BFu9s");
    static STRUCT_IF_C BFu16s_Uc_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_Uc_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu9s, BFu16s_Uc_BFu9s)
//============================================================================


struct  BFu16s_Uc_C  {
  unsigned short v1:16;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu16s_Uc_C) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_Uc_C()
{
  {
    init_simple_test("BFu16s_Uc_C");
    static STRUCT_IF_C BFu16s_Uc_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_C");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_C.v2");
    check_field_offset(lv, v3, 3, "BFu16s_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_C, BFu16s_Uc_C)
//============================================================================


struct  BFu16s_Uc_D  {
  unsigned short v1:16;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu16s_Uc_D) C1{ Fs:16 Fc FL}



static void Test_BFu16s_Uc_D()
{
  {
    init_simple_test("BFu16s_Uc_D");
    static STRUCT_IF_C BFu16s_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_D");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_D, BFu16s_Uc_D)
//============================================================================


struct  BFu16s_Uc_F  {
  unsigned short v1:16;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu16s_Uc_F) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_Uc_F()
{
  {
    init_simple_test("BFu16s_Uc_F");
    static STRUCT_IF_C BFu16s_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_F");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_F, BFu16s_Uc_F)
//============================================================================


struct  BFu16s_Uc_I  {
  unsigned short v1:16;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu16s_Uc_I) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_Uc_I()
{
  {
    init_simple_test("BFu16s_Uc_I");
    static STRUCT_IF_C BFu16s_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_I");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_I, BFu16s_Uc_I)
//============================================================================


struct  BFu16s_Uc_Ip  {
  unsigned short v1:16;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu16s_Uc_Ip) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_Uc_Ip()
{
  {
    init_simple_test("BFu16s_Uc_Ip");
    static STRUCT_IF_C BFu16s_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Ip");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Ip, BFu16s_Uc_Ip)
//============================================================================


struct  BFu16s_Uc_L  {
  unsigned short v1:16;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Uc_L) C1{ Fs:16 Fc FL}



static void Test_BFu16s_Uc_L()
{
  {
    init_simple_test("BFu16s_Uc_L");
    static STRUCT_IF_C BFu16s_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_L");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_L, BFu16s_Uc_L)
//============================================================================


struct  BFu16s_Uc_S  {
  unsigned short v1:16;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu16s_Uc_S) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_Uc_S()
{
  {
    init_simple_test("BFu16s_Uc_S");
    static STRUCT_IF_C BFu16s_Uc_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_S");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_S.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_S, BFu16s_Uc_S)
//============================================================================


struct  BFu16s_Uc_Uc  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Uc_Uc) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_Uc_Uc()
{
  {
    init_simple_test("BFu16s_Uc_Uc");
    static STRUCT_IF_C BFu16s_Uc_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16s_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Uc, BFu16s_Uc_Uc)
//============================================================================


struct  BFu16s_Uc_Ui  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Uc_Ui) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_Uc_Ui()
{
  {
    init_simple_test("BFu16s_Uc_Ui");
    static STRUCT_IF_C BFu16s_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Ui");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Ui, BFu16s_Uc_Ui)
//============================================================================


struct  BFu16s_Uc_Ul  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Uc_Ul) C1{ Fs:16 Fc FL}



static void Test_BFu16s_Uc_Ul()
{
  {
    init_simple_test("BFu16s_Uc_Ul");
    static STRUCT_IF_C BFu16s_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Ul");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Ul, BFu16s_Uc_Ul)
//============================================================================


struct  BFu16s_Uc_Us  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Uc_Us) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_Uc_Us()
{
  {
    init_simple_test("BFu16s_Uc_Us");
    static STRUCT_IF_C BFu16s_Uc_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Us");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Us, BFu16s_Uc_Us)
//============================================================================


struct  BFu16s_Uc_Vp  {
  unsigned short v1:16;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu16s_Uc_Vp) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_Uc_Vp()
{
  {
    init_simple_test("BFu16s_Uc_Vp");
    static STRUCT_IF_C BFu16s_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_Vp");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_Vp, BFu16s_Uc_Vp)
//============================================================================


struct  BFu16s_Ui  {
  unsigned short v1:16;
  unsigned int v2;
};
//SIG(1 BFu16s_Ui) C1{ Fs:16 Fi}



static void Test_BFu16s_Ui()
{
  {
    init_simple_test("BFu16s_Ui");
    static STRUCT_IF_C BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui");
    check_field_offset(lv, v2, 4, "BFu16s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui, BFu16s_Ui)
//============================================================================


struct  BFu16s_Ui_BFu15i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Ui_BFu15i) C1{ Fs:16 Fi Fi:15}



static void Test_BFu16s_Ui_BFu15i()
{
  {
    init_simple_test("BFu16s_Ui_BFu15i");
    static STRUCT_IF_C BFu16s_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu15i, BFu16s_Ui_BFu15i)
//============================================================================


struct  BFu16s_Ui_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Ui_BFu15ll) C1{ Fs:16 Fi FL:15}



static void Test_BFu16s_Ui_BFu15ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu15ll");
    static STRUCT_IF_C BFu16s_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu15ll, BFu16s_Ui_BFu15ll)
//============================================================================


struct  BFu16s_Ui_BFu15s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Ui_BFu15s) C1{ Fs:16 Fi Fs:15}



static void Test_BFu16s_Ui_BFu15s()
{
  {
    init_simple_test("BFu16s_Ui_BFu15s");
    static STRUCT_IF_C BFu16s_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu15s, BFu16s_Ui_BFu15s)
//============================================================================


struct  BFu16s_Ui_BFu16i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Ui_BFu16i) C1{ Fs:16 Fi Fi:16}



static void Test_BFu16s_Ui_BFu16i()
{
  {
    init_simple_test("BFu16s_Ui_BFu16i");
    static STRUCT_IF_C BFu16s_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu16i, BFu16s_Ui_BFu16i)
//============================================================================


struct  BFu16s_Ui_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Ui_BFu16ll) C1{ Fs:16 Fi FL:16}



static void Test_BFu16s_Ui_BFu16ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu16ll");
    static STRUCT_IF_C BFu16s_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu16ll, BFu16s_Ui_BFu16ll)
//============================================================================


struct  BFu16s_Ui_BFu16s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Ui_BFu16s) C1{ Fs:16 Fi Fs:16}



static void Test_BFu16s_Ui_BFu16s()
{
  {
    init_simple_test("BFu16s_Ui_BFu16s");
    static STRUCT_IF_C BFu16s_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu16s, BFu16s_Ui_BFu16s)
//============================================================================


struct  BFu16s_Ui_BFu17i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Ui_BFu17i) C1{ Fs:16 Fi Fi:17}



static void Test_BFu16s_Ui_BFu17i()
{
  {
    init_simple_test("BFu16s_Ui_BFu17i");
    static STRUCT_IF_C BFu16s_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu17i, BFu16s_Ui_BFu17i)
//============================================================================


struct  BFu16s_Ui_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Ui_BFu17ll) C1{ Fs:16 Fi FL:17}



static void Test_BFu16s_Ui_BFu17ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu17ll");
    static STRUCT_IF_C BFu16s_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu17ll, BFu16s_Ui_BFu17ll)
//============================================================================


struct  BFu16s_Ui_BFu1c  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Ui_BFu1c) C1{ Fs:16 Fi Fc:1}



static void Test_BFu16s_Ui_BFu1c()
{
  {
    init_simple_test("BFu16s_Ui_BFu1c");
    static STRUCT_IF_C BFu16s_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu1c, BFu16s_Ui_BFu1c)
//============================================================================


struct  BFu16s_Ui_BFu1i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Ui_BFu1i) C1{ Fs:16 Fi Fi:1}



static void Test_BFu16s_Ui_BFu1i()
{
  {
    init_simple_test("BFu16s_Ui_BFu1i");
    static STRUCT_IF_C BFu16s_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu1i, BFu16s_Ui_BFu1i)
//============================================================================


struct  BFu16s_Ui_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Ui_BFu1ll) C1{ Fs:16 Fi FL:1}



static void Test_BFu16s_Ui_BFu1ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu1ll");
    static STRUCT_IF_C BFu16s_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu1ll, BFu16s_Ui_BFu1ll)
//============================================================================


struct  BFu16s_Ui_BFu1s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Ui_BFu1s) C1{ Fs:16 Fi Fs:1}



static void Test_BFu16s_Ui_BFu1s()
{
  {
    init_simple_test("BFu16s_Ui_BFu1s");
    static STRUCT_IF_C BFu16s_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu1s, BFu16s_Ui_BFu1s)
//============================================================================


struct  BFu16s_Ui_BFu31i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Ui_BFu31i) C1{ Fs:16 Fi Fi:31}



static void Test_BFu16s_Ui_BFu31i()
{
  {
    init_simple_test("BFu16s_Ui_BFu31i");
    static STRUCT_IF_C BFu16s_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu31i, BFu16s_Ui_BFu31i)
//============================================================================


struct  BFu16s_Ui_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Ui_BFu31ll) C1{ Fs:16 Fi FL:31}



static void Test_BFu16s_Ui_BFu31ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu31ll");
    static STRUCT_IF_C BFu16s_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu31ll, BFu16s_Ui_BFu31ll)
//============================================================================


struct  BFu16s_Ui_BFu32i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Ui_BFu32i) C1{ Fs:16 Fi Fi:32}



static void Test_BFu16s_Ui_BFu32i()
{
  {
    init_simple_test("BFu16s_Ui_BFu32i");
    static STRUCT_IF_C BFu16s_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu32i, BFu16s_Ui_BFu32i)
//============================================================================


struct  BFu16s_Ui_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Ui_BFu32ll) C1{ Fs:16 Fi FL:32}



static void Test_BFu16s_Ui_BFu32ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu32ll");
    static STRUCT_IF_C BFu16s_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu32ll, BFu16s_Ui_BFu32ll)
//============================================================================


struct  BFu16s_Ui_BFu33  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Ui_BFu33) C1{ Fs:16 Fi FL:33}



static void Test_BFu16s_Ui_BFu33()
{
  {
    init_simple_test("BFu16s_Ui_BFu33");
    static STRUCT_IF_C BFu16s_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16s_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16s_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu33, BFu16s_Ui_BFu33)
//============================================================================


struct  BFu16s_Ui_BFu7c  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Ui_BFu7c) C1{ Fs:16 Fi Fc:7}



static void Test_BFu16s_Ui_BFu7c()
{
  {
    init_simple_test("BFu16s_Ui_BFu7c");
    static STRUCT_IF_C BFu16s_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu7c, BFu16s_Ui_BFu7c)
//============================================================================


struct  BFu16s_Ui_BFu7i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Ui_BFu7i) C1{ Fs:16 Fi Fi:7}



static void Test_BFu16s_Ui_BFu7i()
{
  {
    init_simple_test("BFu16s_Ui_BFu7i");
    static STRUCT_IF_C BFu16s_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu7i, BFu16s_Ui_BFu7i)
//============================================================================


struct  BFu16s_Ui_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Ui_BFu7ll) C1{ Fs:16 Fi FL:7}



static void Test_BFu16s_Ui_BFu7ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu7ll");
    static STRUCT_IF_C BFu16s_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu7ll, BFu16s_Ui_BFu7ll)
//============================================================================


struct  BFu16s_Ui_BFu7s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Ui_BFu7s) C1{ Fs:16 Fi Fs:7}



static void Test_BFu16s_Ui_BFu7s()
{
  {
    init_simple_test("BFu16s_Ui_BFu7s");
    static STRUCT_IF_C BFu16s_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu7s, BFu16s_Ui_BFu7s)
//============================================================================


struct  BFu16s_Ui_BFu8c  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Ui_BFu8c) C1{ Fs:16 Fi Fc:8}



static void Test_BFu16s_Ui_BFu8c()
{
  {
    init_simple_test("BFu16s_Ui_BFu8c");
    static STRUCT_IF_C BFu16s_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu8c, BFu16s_Ui_BFu8c)
//============================================================================


struct  BFu16s_Ui_BFu8i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Ui_BFu8i) C1{ Fs:16 Fi Fi:8}



static void Test_BFu16s_Ui_BFu8i()
{
  {
    init_simple_test("BFu16s_Ui_BFu8i");
    static STRUCT_IF_C BFu16s_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu8i, BFu16s_Ui_BFu8i)
//============================================================================


struct  BFu16s_Ui_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Ui_BFu8ll) C1{ Fs:16 Fi FL:8}



static void Test_BFu16s_Ui_BFu8ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu8ll");
    static STRUCT_IF_C BFu16s_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu8ll, BFu16s_Ui_BFu8ll)
//============================================================================


struct  BFu16s_Ui_BFu8s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Ui_BFu8s) C1{ Fs:16 Fi Fs:8}



static void Test_BFu16s_Ui_BFu8s()
{
  {
    init_simple_test("BFu16s_Ui_BFu8s");
    static STRUCT_IF_C BFu16s_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu8s, BFu16s_Ui_BFu8s)
//============================================================================


struct  BFu16s_Ui_BFu9i  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Ui_BFu9i) C1{ Fs:16 Fi Fi:9}



static void Test_BFu16s_Ui_BFu9i()
{
  {
    init_simple_test("BFu16s_Ui_BFu9i");
    static STRUCT_IF_C BFu16s_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu9i, BFu16s_Ui_BFu9i)
//============================================================================


struct  BFu16s_Ui_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Ui_BFu9ll) C1{ Fs:16 Fi FL:9}



static void Test_BFu16s_Ui_BFu9ll()
{
  {
    init_simple_test("BFu16s_Ui_BFu9ll");
    static STRUCT_IF_C BFu16s_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu9ll, BFu16s_Ui_BFu9ll)
//============================================================================


struct  BFu16s_Ui_BFu9s  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Ui_BFu9s) C1{ Fs:16 Fi Fs:9}



static void Test_BFu16s_Ui_BFu9s()
{
  {
    init_simple_test("BFu16s_Ui_BFu9s");
    static STRUCT_IF_C BFu16s_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_BFu9s, BFu16s_Ui_BFu9s)
//============================================================================


struct  BFu16s_Ui_C  {
  unsigned short v1:16;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu16s_Ui_C) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_Ui_C()
{
  {
    init_simple_test("BFu16s_Ui_C");
    static STRUCT_IF_C BFu16s_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_C");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_C, BFu16s_Ui_C)
//============================================================================


struct  BFu16s_Ui_D  {
  unsigned short v1:16;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu16s_Ui_D) C1{ Fs:16 Fi FL}



static void Test_BFu16s_Ui_D()
{
  {
    init_simple_test("BFu16s_Ui_D");
    static STRUCT_IF_C BFu16s_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_D");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_D, BFu16s_Ui_D)
//============================================================================


struct  BFu16s_Ui_F  {
  unsigned short v1:16;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu16s_Ui_F) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_Ui_F()
{
  {
    init_simple_test("BFu16s_Ui_F");
    static STRUCT_IF_C BFu16s_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_F");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_F, BFu16s_Ui_F)
//============================================================================


struct  BFu16s_Ui_I  {
  unsigned short v1:16;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu16s_Ui_I) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_Ui_I()
{
  {
    init_simple_test("BFu16s_Ui_I");
    static STRUCT_IF_C BFu16s_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_I");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_I, BFu16s_Ui_I)
//============================================================================


struct  BFu16s_Ui_Ip  {
  unsigned short v1:16;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu16s_Ui_Ip) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_Ui_Ip()
{
  {
    init_simple_test("BFu16s_Ui_Ip");
    static STRUCT_IF_C BFu16s_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Ip, BFu16s_Ui_Ip)
//============================================================================


struct  BFu16s_Ui_L  {
  unsigned short v1:16;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Ui_L) C1{ Fs:16 Fi FL}



static void Test_BFu16s_Ui_L()
{
  {
    init_simple_test("BFu16s_Ui_L");
    static STRUCT_IF_C BFu16s_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_L");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_L, BFu16s_Ui_L)
//============================================================================


struct  BFu16s_Ui_S  {
  unsigned short v1:16;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu16s_Ui_S) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_Ui_S()
{
  {
    init_simple_test("BFu16s_Ui_S");
    static STRUCT_IF_C BFu16s_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_S");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_S, BFu16s_Ui_S)
//============================================================================


struct  BFu16s_Ui_Uc  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Ui_Uc) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_Ui_Uc()
{
  {
    init_simple_test("BFu16s_Ui_Uc");
    static STRUCT_IF_C BFu16s_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Uc, BFu16s_Ui_Uc)
//============================================================================


struct  BFu16s_Ui_Ui  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Ui_Ui) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_Ui_Ui()
{
  {
    init_simple_test("BFu16s_Ui_Ui");
    static STRUCT_IF_C BFu16s_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Ui, BFu16s_Ui_Ui)
//============================================================================


struct  BFu16s_Ui_Ul  {
  unsigned short v1:16;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Ui_Ul) C1{ Fs:16 Fi FL}



static void Test_BFu16s_Ui_Ul()
{
  {
    init_simple_test("BFu16s_Ui_Ul");
    static STRUCT_IF_C BFu16s_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Ul, BFu16s_Ui_Ul)
//============================================================================


struct  BFu16s_Ui_Us  {
  unsigned short v1:16;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Ui_Us) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_Ui_Us()
{
  {
    init_simple_test("BFu16s_Ui_Us");
    static STRUCT_IF_C BFu16s_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Us, BFu16s_Ui_Us)
//============================================================================


struct  BFu16s_Ui_Vp  {
  unsigned short v1:16;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu16s_Ui_Vp) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_Ui_Vp()
{
  {
    init_simple_test("BFu16s_Ui_Vp");
    static STRUCT_IF_C BFu16s_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ui_Vp, BFu16s_Ui_Vp)
//============================================================================


struct  BFu16s_Ul  {
  unsigned short v1:16;
  __tsu64 v2;
};
//SIG(1 BFu16s_Ul) C1{ Fs:16 FL}



static void Test_BFu16s_Ul()
{
  {
    init_simple_test("BFu16s_Ul");
    static STRUCT_IF_C BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul, BFu16s_Ul)
//============================================================================


struct  BFu16s_Ul_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Ul_BFu15i) C1{ Fs:16 FL Fi:15}



static void Test_BFu16s_Ul_BFu15i()
{
  {
    init_simple_test("BFu16s_Ul_BFu15i");
    static STRUCT_IF_C BFu16s_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu15i, BFu16s_Ul_BFu15i)
//============================================================================


struct  BFu16s_Ul_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Ul_BFu15ll) C1{ Fs:16 FL FL:15}



static void Test_BFu16s_Ul_BFu15ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu15ll");
    static STRUCT_IF_C BFu16s_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu15ll, BFu16s_Ul_BFu15ll)
//============================================================================


struct  BFu16s_Ul_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Ul_BFu15s) C1{ Fs:16 FL Fs:15}



static void Test_BFu16s_Ul_BFu15s()
{
  {
    init_simple_test("BFu16s_Ul_BFu15s");
    static STRUCT_IF_C BFu16s_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu15s, BFu16s_Ul_BFu15s)
//============================================================================


struct  BFu16s_Ul_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Ul_BFu16i) C1{ Fs:16 FL Fi:16}



static void Test_BFu16s_Ul_BFu16i()
{
  {
    init_simple_test("BFu16s_Ul_BFu16i");
    static STRUCT_IF_C BFu16s_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu16i, BFu16s_Ul_BFu16i)
//============================================================================


struct  BFu16s_Ul_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Ul_BFu16ll) C1{ Fs:16 FL FL:16}



static void Test_BFu16s_Ul_BFu16ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu16ll");
    static STRUCT_IF_C BFu16s_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu16ll, BFu16s_Ul_BFu16ll)
//============================================================================


struct  BFu16s_Ul_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Ul_BFu16s) C1{ Fs:16 FL Fs:16}



static void Test_BFu16s_Ul_BFu16s()
{
  {
    init_simple_test("BFu16s_Ul_BFu16s");
    static STRUCT_IF_C BFu16s_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu16s, BFu16s_Ul_BFu16s)
//============================================================================


struct  BFu16s_Ul_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Ul_BFu17i) C1{ Fs:16 FL Fi:17}



static void Test_BFu16s_Ul_BFu17i()
{
  {
    init_simple_test("BFu16s_Ul_BFu17i");
    static STRUCT_IF_C BFu16s_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu17i, BFu16s_Ul_BFu17i)
//============================================================================


struct  BFu16s_Ul_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Ul_BFu17ll) C1{ Fs:16 FL FL:17}



static void Test_BFu16s_Ul_BFu17ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu17ll");
    static STRUCT_IF_C BFu16s_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu17ll, BFu16s_Ul_BFu17ll)
//============================================================================


struct  BFu16s_Ul_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Ul_BFu1c) C1{ Fs:16 FL Fc:1}



static void Test_BFu16s_Ul_BFu1c()
{
  {
    init_simple_test("BFu16s_Ul_BFu1c");
    static STRUCT_IF_C BFu16s_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu1c, BFu16s_Ul_BFu1c)
//============================================================================


struct  BFu16s_Ul_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Ul_BFu1i) C1{ Fs:16 FL Fi:1}



static void Test_BFu16s_Ul_BFu1i()
{
  {
    init_simple_test("BFu16s_Ul_BFu1i");
    static STRUCT_IF_C BFu16s_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu1i, BFu16s_Ul_BFu1i)
//============================================================================


struct  BFu16s_Ul_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Ul_BFu1ll) C1{ Fs:16 FL FL:1}



static void Test_BFu16s_Ul_BFu1ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu1ll");
    static STRUCT_IF_C BFu16s_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu1ll, BFu16s_Ul_BFu1ll)
//============================================================================


struct  BFu16s_Ul_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Ul_BFu1s) C1{ Fs:16 FL Fs:1}



static void Test_BFu16s_Ul_BFu1s()
{
  {
    init_simple_test("BFu16s_Ul_BFu1s");
    static STRUCT_IF_C BFu16s_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu1s, BFu16s_Ul_BFu1s)
//============================================================================


struct  BFu16s_Ul_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Ul_BFu31i) C1{ Fs:16 FL Fi:31}



static void Test_BFu16s_Ul_BFu31i()
{
  {
    init_simple_test("BFu16s_Ul_BFu31i");
    static STRUCT_IF_C BFu16s_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu31i, BFu16s_Ul_BFu31i)
//============================================================================


struct  BFu16s_Ul_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Ul_BFu31ll) C1{ Fs:16 FL FL:31}



static void Test_BFu16s_Ul_BFu31ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu31ll");
    static STRUCT_IF_C BFu16s_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu31ll, BFu16s_Ul_BFu31ll)
//============================================================================


struct  BFu16s_Ul_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Ul_BFu32i) C1{ Fs:16 FL Fi:32}



static void Test_BFu16s_Ul_BFu32i()
{
  {
    init_simple_test("BFu16s_Ul_BFu32i");
    static STRUCT_IF_C BFu16s_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu32i, BFu16s_Ul_BFu32i)
//============================================================================


struct  BFu16s_Ul_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Ul_BFu32ll) C1{ Fs:16 FL FL:32}



static void Test_BFu16s_Ul_BFu32ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu32ll");
    static STRUCT_IF_C BFu16s_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu32ll, BFu16s_Ul_BFu32ll)
//============================================================================


struct  BFu16s_Ul_BFu33  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Ul_BFu33) C1{ Fs:16 FL FL:33}



static void Test_BFu16s_Ul_BFu33()
{
  {
    init_simple_test("BFu16s_Ul_BFu33");
    static STRUCT_IF_C BFu16s_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16s_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16s_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu33, BFu16s_Ul_BFu33)
//============================================================================


struct  BFu16s_Ul_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Ul_BFu7c) C1{ Fs:16 FL Fc:7}



static void Test_BFu16s_Ul_BFu7c()
{
  {
    init_simple_test("BFu16s_Ul_BFu7c");
    static STRUCT_IF_C BFu16s_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu7c, BFu16s_Ul_BFu7c)
//============================================================================


struct  BFu16s_Ul_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Ul_BFu7i) C1{ Fs:16 FL Fi:7}



static void Test_BFu16s_Ul_BFu7i()
{
  {
    init_simple_test("BFu16s_Ul_BFu7i");
    static STRUCT_IF_C BFu16s_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu7i, BFu16s_Ul_BFu7i)
//============================================================================


struct  BFu16s_Ul_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Ul_BFu7ll) C1{ Fs:16 FL FL:7}



static void Test_BFu16s_Ul_BFu7ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu7ll");
    static STRUCT_IF_C BFu16s_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu7ll, BFu16s_Ul_BFu7ll)
//============================================================================


struct  BFu16s_Ul_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Ul_BFu7s) C1{ Fs:16 FL Fs:7}



static void Test_BFu16s_Ul_BFu7s()
{
  {
    init_simple_test("BFu16s_Ul_BFu7s");
    static STRUCT_IF_C BFu16s_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu7s, BFu16s_Ul_BFu7s)
//============================================================================


struct  BFu16s_Ul_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Ul_BFu8c) C1{ Fs:16 FL Fc:8}



static void Test_BFu16s_Ul_BFu8c()
{
  {
    init_simple_test("BFu16s_Ul_BFu8c");
    static STRUCT_IF_C BFu16s_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu8c, BFu16s_Ul_BFu8c)
//============================================================================


struct  BFu16s_Ul_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Ul_BFu8i) C1{ Fs:16 FL Fi:8}



static void Test_BFu16s_Ul_BFu8i()
{
  {
    init_simple_test("BFu16s_Ul_BFu8i");
    static STRUCT_IF_C BFu16s_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu8i, BFu16s_Ul_BFu8i)
//============================================================================


struct  BFu16s_Ul_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Ul_BFu8ll) C1{ Fs:16 FL FL:8}



static void Test_BFu16s_Ul_BFu8ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu8ll");
    static STRUCT_IF_C BFu16s_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu8ll, BFu16s_Ul_BFu8ll)
//============================================================================


struct  BFu16s_Ul_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Ul_BFu8s) C1{ Fs:16 FL Fs:8}



static void Test_BFu16s_Ul_BFu8s()
{
  {
    init_simple_test("BFu16s_Ul_BFu8s");
    static STRUCT_IF_C BFu16s_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu8s, BFu16s_Ul_BFu8s)
//============================================================================


struct  BFu16s_Ul_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Ul_BFu9i) C1{ Fs:16 FL Fi:9}



static void Test_BFu16s_Ul_BFu9i()
{
  {
    init_simple_test("BFu16s_Ul_BFu9i");
    static STRUCT_IF_C BFu16s_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu9i, BFu16s_Ul_BFu9i)
//============================================================================


struct  BFu16s_Ul_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Ul_BFu9ll) C1{ Fs:16 FL FL:9}



static void Test_BFu16s_Ul_BFu9ll()
{
  {
    init_simple_test("BFu16s_Ul_BFu9ll");
    static STRUCT_IF_C BFu16s_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu9ll, BFu16s_Ul_BFu9ll)
//============================================================================


struct  BFu16s_Ul_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Ul_BFu9s) C1{ Fs:16 FL Fs:9}



static void Test_BFu16s_Ul_BFu9s()
{
  {
    init_simple_test("BFu16s_Ul_BFu9s");
    static STRUCT_IF_C BFu16s_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_BFu9s, BFu16s_Ul_BFu9s)
//============================================================================


struct  BFu16s_Ul_C  {
  unsigned short v1:16;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu16s_Ul_C) C1{ Fs:16 FL Fc}



static void Test_BFu16s_Ul_C()
{
  {
    init_simple_test("BFu16s_Ul_C");
    static STRUCT_IF_C BFu16s_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_C, BFu16s_Ul_C)
//============================================================================


struct  BFu16s_Ul_D  {
  unsigned short v1:16;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu16s_Ul_D) C1{ Fs:16 FL[2]}



static void Test_BFu16s_Ul_D()
{
  {
    init_simple_test("BFu16s_Ul_D");
    static STRUCT_IF_C BFu16s_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_D, BFu16s_Ul_D)
//============================================================================


struct  BFu16s_Ul_F  {
  unsigned short v1:16;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu16s_Ul_F) C1{ Fs:16 FL Fi}



static void Test_BFu16s_Ul_F()
{
  {
    init_simple_test("BFu16s_Ul_F");
    static STRUCT_IF_C BFu16s_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_F, BFu16s_Ul_F)
//============================================================================


struct  BFu16s_Ul_I  {
  unsigned short v1:16;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu16s_Ul_I) C1{ Fs:16 FL Fi}



static void Test_BFu16s_Ul_I()
{
  {
    init_simple_test("BFu16s_Ul_I");
    static STRUCT_IF_C BFu16s_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_I, BFu16s_Ul_I)
//============================================================================


struct  BFu16s_Ul_Ip  {
  unsigned short v1:16;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu16s_Ul_Ip) C1{ Fs:16 FL Fp}



static void Test_BFu16s_Ul_Ip()
{
  {
    init_simple_test("BFu16s_Ul_Ip");
    static STRUCT_IF_C BFu16s_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Ip, BFu16s_Ul_Ip)
//============================================================================


struct  BFu16s_Ul_L  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Ul_L) C1{ Fs:16 FL[2]}



static void Test_BFu16s_Ul_L()
{
  {
    init_simple_test("BFu16s_Ul_L");
    static STRUCT_IF_C BFu16s_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_L, BFu16s_Ul_L)
//============================================================================


struct  BFu16s_Ul_S  {
  unsigned short v1:16;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu16s_Ul_S) C1{ Fs:16 FL Fs}



static void Test_BFu16s_Ul_S()
{
  {
    init_simple_test("BFu16s_Ul_S");
    static STRUCT_IF_C BFu16s_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_S, BFu16s_Ul_S)
//============================================================================


struct  BFu16s_Ul_Uc  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Ul_Uc) C1{ Fs:16 FL Fc}



static void Test_BFu16s_Ul_Uc()
{
  {
    init_simple_test("BFu16s_Ul_Uc");
    static STRUCT_IF_C BFu16s_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Uc, BFu16s_Ul_Uc)
//============================================================================


struct  BFu16s_Ul_Ui  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Ul_Ui) C1{ Fs:16 FL Fi}



static void Test_BFu16s_Ul_Ui()
{
  {
    init_simple_test("BFu16s_Ul_Ui");
    static STRUCT_IF_C BFu16s_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Ui, BFu16s_Ul_Ui)
//============================================================================


struct  BFu16s_Ul_Ul  {
  unsigned short v1:16;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Ul_Ul) C1{ Fs:16 FL[2]}



static void Test_BFu16s_Ul_Ul()
{
  {
    init_simple_test("BFu16s_Ul_Ul");
    static STRUCT_IF_C BFu16s_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Ul, BFu16s_Ul_Ul)
//============================================================================


struct  BFu16s_Ul_Us  {
  unsigned short v1:16;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Ul_Us) C1{ Fs:16 FL Fs}



static void Test_BFu16s_Ul_Us()
{
  {
    init_simple_test("BFu16s_Ul_Us");
    static STRUCT_IF_C BFu16s_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Us, BFu16s_Ul_Us)
//============================================================================


struct  BFu16s_Ul_Vp  {
  unsigned short v1:16;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu16s_Ul_Vp) C1{ Fs:16 FL Fp}



static void Test_BFu16s_Ul_Vp()
{
  {
    init_simple_test("BFu16s_Ul_Vp");
    static STRUCT_IF_C BFu16s_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ul_Vp, BFu16s_Ul_Vp)
//============================================================================


struct  BFu16s_Us  {
  unsigned short v1:16;
  unsigned short v2;
};
//SIG(1 BFu16s_Us) C1{ Fs:16 Fs}



static void Test_BFu16s_Us()
{
  {
    init_simple_test("BFu16s_Us");
    static STRUCT_IF_C BFu16s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us");
    check_field_offset(lv, v2, 2, "BFu16s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us, BFu16s_Us)
//============================================================================


struct  BFu16s_Us_BFu15i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Us_BFu15i) C1{ Fs:16 Fs Fi:15}



static void Test_BFu16s_Us_BFu15i()
{
  {
    init_simple_test("BFu16s_Us_BFu15i");
    static STRUCT_IF_C BFu16s_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu15i, BFu16s_Us_BFu15i)
//============================================================================


struct  BFu16s_Us_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Us_BFu15ll) C1{ Fs:16 Fs FL:15}



static void Test_BFu16s_Us_BFu15ll()
{
  {
    init_simple_test("BFu16s_Us_BFu15ll");
    static STRUCT_IF_C BFu16s_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu15ll, BFu16s_Us_BFu15ll)
//============================================================================


struct  BFu16s_Us_BFu15s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Us_BFu15s) C1{ Fs:16 Fs Fs:15}



static void Test_BFu16s_Us_BFu15s()
{
  {
    init_simple_test("BFu16s_Us_BFu15s");
    static STRUCT_IF_C BFu16s_Us_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu15s, BFu16s_Us_BFu15s)
//============================================================================


struct  BFu16s_Us_BFu16i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Us_BFu16i) C1{ Fs:16 Fs Fi:16}



static void Test_BFu16s_Us_BFu16i()
{
  {
    init_simple_test("BFu16s_Us_BFu16i");
    static STRUCT_IF_C BFu16s_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu16i, BFu16s_Us_BFu16i)
//============================================================================


struct  BFu16s_Us_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Us_BFu16ll) C1{ Fs:16 Fs FL:16}



static void Test_BFu16s_Us_BFu16ll()
{
  {
    init_simple_test("BFu16s_Us_BFu16ll");
    static STRUCT_IF_C BFu16s_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu16ll, BFu16s_Us_BFu16ll)
//============================================================================


struct  BFu16s_Us_BFu16s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Us_BFu16s) C1{ Fs:16 Fs Fs:16}



static void Test_BFu16s_Us_BFu16s()
{
  {
    init_simple_test("BFu16s_Us_BFu16s");
    static STRUCT_IF_C BFu16s_Us_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu16s, BFu16s_Us_BFu16s)
//============================================================================


struct  BFu16s_Us_BFu17i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Us_BFu17i) C1{ Fs:16 Fs Fi:17}



static void Test_BFu16s_Us_BFu17i()
{
  {
    init_simple_test("BFu16s_Us_BFu17i");
    static STRUCT_IF_C BFu16s_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu17i, BFu16s_Us_BFu17i)
//============================================================================


struct  BFu16s_Us_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Us_BFu17ll) C1{ Fs:16 Fs FL:17}



static void Test_BFu16s_Us_BFu17ll()
{
  {
    init_simple_test("BFu16s_Us_BFu17ll");
    static STRUCT_IF_C BFu16s_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu17ll, BFu16s_Us_BFu17ll)
//============================================================================


struct  BFu16s_Us_BFu1c  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Us_BFu1c) C1{ Fs:16 Fs Fc:1}



static void Test_BFu16s_Us_BFu1c()
{
  {
    init_simple_test("BFu16s_Us_BFu1c");
    static STRUCT_IF_C BFu16s_Us_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu1c, BFu16s_Us_BFu1c)
//============================================================================


struct  BFu16s_Us_BFu1i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Us_BFu1i) C1{ Fs:16 Fs Fi:1}



static void Test_BFu16s_Us_BFu1i()
{
  {
    init_simple_test("BFu16s_Us_BFu1i");
    static STRUCT_IF_C BFu16s_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu1i, BFu16s_Us_BFu1i)
//============================================================================


struct  BFu16s_Us_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Us_BFu1ll) C1{ Fs:16 Fs FL:1}



static void Test_BFu16s_Us_BFu1ll()
{
  {
    init_simple_test("BFu16s_Us_BFu1ll");
    static STRUCT_IF_C BFu16s_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu1ll, BFu16s_Us_BFu1ll)
//============================================================================


struct  BFu16s_Us_BFu1s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Us_BFu1s) C1{ Fs:16 Fs Fs:1}



static void Test_BFu16s_Us_BFu1s()
{
  {
    init_simple_test("BFu16s_Us_BFu1s");
    static STRUCT_IF_C BFu16s_Us_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu1s, BFu16s_Us_BFu1s)
//============================================================================


struct  BFu16s_Us_BFu31i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Us_BFu31i) C1{ Fs:16 Fs Fi:31}



static void Test_BFu16s_Us_BFu31i()
{
  {
    init_simple_test("BFu16s_Us_BFu31i");
    static STRUCT_IF_C BFu16s_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu31i, BFu16s_Us_BFu31i)
//============================================================================


struct  BFu16s_Us_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Us_BFu31ll) C1{ Fs:16 Fs FL:31}



static void Test_BFu16s_Us_BFu31ll()
{
  {
    init_simple_test("BFu16s_Us_BFu31ll");
    static STRUCT_IF_C BFu16s_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu31ll, BFu16s_Us_BFu31ll)
//============================================================================


struct  BFu16s_Us_BFu32i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Us_BFu32i) C1{ Fs:16 Fs Fi:32}



static void Test_BFu16s_Us_BFu32i()
{
  {
    init_simple_test("BFu16s_Us_BFu32i");
    static STRUCT_IF_C BFu16s_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu32i, BFu16s_Us_BFu32i)
//============================================================================


struct  BFu16s_Us_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Us_BFu32ll) C1{ Fs:16 Fs FL:32}



static void Test_BFu16s_Us_BFu32ll()
{
  {
    init_simple_test("BFu16s_Us_BFu32ll");
    static STRUCT_IF_C BFu16s_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu32ll, BFu16s_Us_BFu32ll)
//============================================================================


struct  BFu16s_Us_BFu33  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Us_BFu33) C1{ Fs:16 Fs FL:33}



static void Test_BFu16s_Us_BFu33()
{
  {
    init_simple_test("BFu16s_Us_BFu33");
    static STRUCT_IF_C BFu16s_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16s_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16s_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu33, BFu16s_Us_BFu33)
//============================================================================


struct  BFu16s_Us_BFu7c  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Us_BFu7c) C1{ Fs:16 Fs Fc:7}



static void Test_BFu16s_Us_BFu7c()
{
  {
    init_simple_test("BFu16s_Us_BFu7c");
    static STRUCT_IF_C BFu16s_Us_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu7c, BFu16s_Us_BFu7c)
//============================================================================


struct  BFu16s_Us_BFu7i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Us_BFu7i) C1{ Fs:16 Fs Fi:7}



static void Test_BFu16s_Us_BFu7i()
{
  {
    init_simple_test("BFu16s_Us_BFu7i");
    static STRUCT_IF_C BFu16s_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu7i, BFu16s_Us_BFu7i)
//============================================================================


struct  BFu16s_Us_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Us_BFu7ll) C1{ Fs:16 Fs FL:7}



static void Test_BFu16s_Us_BFu7ll()
{
  {
    init_simple_test("BFu16s_Us_BFu7ll");
    static STRUCT_IF_C BFu16s_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu7ll, BFu16s_Us_BFu7ll)
//============================================================================


struct  BFu16s_Us_BFu7s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Us_BFu7s) C1{ Fs:16 Fs Fs:7}



static void Test_BFu16s_Us_BFu7s()
{
  {
    init_simple_test("BFu16s_Us_BFu7s");
    static STRUCT_IF_C BFu16s_Us_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu7s, BFu16s_Us_BFu7s)
//============================================================================


struct  BFu16s_Us_BFu8c  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Us_BFu8c) C1{ Fs:16 Fs Fc:8}



static void Test_BFu16s_Us_BFu8c()
{
  {
    init_simple_test("BFu16s_Us_BFu8c");
    static STRUCT_IF_C BFu16s_Us_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu8c, BFu16s_Us_BFu8c)
//============================================================================


struct  BFu16s_Us_BFu8i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Us_BFu8i) C1{ Fs:16 Fs Fi:8}



static void Test_BFu16s_Us_BFu8i()
{
  {
    init_simple_test("BFu16s_Us_BFu8i");
    static STRUCT_IF_C BFu16s_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu8i, BFu16s_Us_BFu8i)
//============================================================================


struct  BFu16s_Us_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Us_BFu8ll) C1{ Fs:16 Fs FL:8}



static void Test_BFu16s_Us_BFu8ll()
{
  {
    init_simple_test("BFu16s_Us_BFu8ll");
    static STRUCT_IF_C BFu16s_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu8ll, BFu16s_Us_BFu8ll)
//============================================================================


struct  BFu16s_Us_BFu8s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Us_BFu8s) C1{ Fs:16 Fs Fs:8}



static void Test_BFu16s_Us_BFu8s()
{
  {
    init_simple_test("BFu16s_Us_BFu8s");
    static STRUCT_IF_C BFu16s_Us_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu8s, BFu16s_Us_BFu8s)
//============================================================================


struct  BFu16s_Us_BFu9i  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Us_BFu9i) C1{ Fs:16 Fs Fi:9}



static void Test_BFu16s_Us_BFu9i()
{
  {
    init_simple_test("BFu16s_Us_BFu9i");
    static STRUCT_IF_C BFu16s_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu9i, BFu16s_Us_BFu9i)
//============================================================================


struct  BFu16s_Us_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Us_BFu9ll) C1{ Fs:16 Fs FL:9}



static void Test_BFu16s_Us_BFu9ll()
{
  {
    init_simple_test("BFu16s_Us_BFu9ll");
    static STRUCT_IF_C BFu16s_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu9ll, BFu16s_Us_BFu9ll)
//============================================================================


struct  BFu16s_Us_BFu9s  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Us_BFu9s) C1{ Fs:16 Fs Fs:9}



static void Test_BFu16s_Us_BFu9s()
{
  {
    init_simple_test("BFu16s_Us_BFu9s");
    static STRUCT_IF_C BFu16s_Us_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16s_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_BFu9s, BFu16s_Us_BFu9s)
//============================================================================


struct  BFu16s_Us_C  {
  unsigned short v1:16;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu16s_Us_C) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_Us_C()
{
  {
    init_simple_test("BFu16s_Us_C");
    static STRUCT_IF_C BFu16s_Us_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_C");
    check_field_offset(lv, v2, 2, "BFu16s_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_C, BFu16s_Us_C)
//============================================================================


struct  BFu16s_Us_D  {
  unsigned short v1:16;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu16s_Us_D) C1{ Fs:16 Fs FL}



static void Test_BFu16s_Us_D()
{
  {
    init_simple_test("BFu16s_Us_D");
    static STRUCT_IF_C BFu16s_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_D");
    check_field_offset(lv, v2, 2, "BFu16s_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_D, BFu16s_Us_D)
//============================================================================


struct  BFu16s_Us_F  {
  unsigned short v1:16;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu16s_Us_F) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_Us_F()
{
  {
    init_simple_test("BFu16s_Us_F");
    static STRUCT_IF_C BFu16s_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_F");
    check_field_offset(lv, v2, 2, "BFu16s_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_F, BFu16s_Us_F)
//============================================================================


struct  BFu16s_Us_I  {
  unsigned short v1:16;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu16s_Us_I) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_Us_I()
{
  {
    init_simple_test("BFu16s_Us_I");
    static STRUCT_IF_C BFu16s_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_I");
    check_field_offset(lv, v2, 2, "BFu16s_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_I, BFu16s_Us_I)
//============================================================================


struct  BFu16s_Us_Ip  {
  unsigned short v1:16;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu16s_Us_Ip) C1{ Fs:16 Fs Fp}



static void Test_BFu16s_Us_Ip()
{
  {
    init_simple_test("BFu16s_Us_Ip");
    static STRUCT_IF_C BFu16s_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Ip, BFu16s_Us_Ip)
//============================================================================


struct  BFu16s_Us_L  {
  unsigned short v1:16;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Us_L) C1{ Fs:16 Fs FL}



static void Test_BFu16s_Us_L()
{
  {
    init_simple_test("BFu16s_Us_L");
    static STRUCT_IF_C BFu16s_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_L");
    check_field_offset(lv, v2, 2, "BFu16s_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_L, BFu16s_Us_L)
//============================================================================


struct  BFu16s_Us_S  {
  unsigned short v1:16;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu16s_Us_S) C1{ Fs:16 Fs[2]}



static void Test_BFu16s_Us_S()
{
  {
    init_simple_test("BFu16s_Us_S");
    static STRUCT_IF_C BFu16s_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_S");
    check_field_offset(lv, v2, 2, "BFu16s_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_S, BFu16s_Us_S)
//============================================================================


struct  BFu16s_Us_Uc  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Us_Uc) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_Us_Uc()
{
  {
    init_simple_test("BFu16s_Us_Uc");
    static STRUCT_IF_C BFu16s_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Uc, BFu16s_Us_Uc)
//============================================================================


struct  BFu16s_Us_Ui  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Us_Ui) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_Us_Ui()
{
  {
    init_simple_test("BFu16s_Us_Ui");
    static STRUCT_IF_C BFu16s_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Ui, BFu16s_Us_Ui)
//============================================================================


struct  BFu16s_Us_Ul  {
  unsigned short v1:16;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Us_Ul) C1{ Fs:16 Fs FL}



static void Test_BFu16s_Us_Ul()
{
  {
    init_simple_test("BFu16s_Us_Ul");
    static STRUCT_IF_C BFu16s_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Ul, BFu16s_Us_Ul)
//============================================================================


struct  BFu16s_Us_Us  {
  unsigned short v1:16;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Us_Us) C1{ Fs:16 Fs[2]}



static void Test_BFu16s_Us_Us()
{
  {
    init_simple_test("BFu16s_Us_Us");
    static STRUCT_IF_C BFu16s_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Us");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Us, BFu16s_Us_Us)
//============================================================================


struct  BFu16s_Us_Vp  {
  unsigned short v1:16;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu16s_Us_Vp) C1{ Fs:16 Fs Fp}



static void Test_BFu16s_Us_Vp()
{
  {
    init_simple_test("BFu16s_Us_Vp");
    static STRUCT_IF_C BFu16s_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu16s_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Us_Vp, BFu16s_Us_Vp)
//============================================================================


struct  BFu16s_Vp  {
  unsigned short v1:16;
  void *v2;
};
//SIG(1 BFu16s_Vp) C1{ Fs:16 Fp}



static void Test_BFu16s_Vp()
{
  {
    init_simple_test("BFu16s_Vp");
    static STRUCT_IF_C BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp, BFu16s_Vp)
//============================================================================


struct  BFu16s_Vp_BFu15i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Vp_BFu15i) C1{ Fs:16 Fp Fi:15}



static void Test_BFu16s_Vp_BFu15i()
{
  {
    init_simple_test("BFu16s_Vp_BFu15i");
    static STRUCT_IF_C BFu16s_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu15i, BFu16s_Vp_BFu15i)
//============================================================================


struct  BFu16s_Vp_BFu15ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Vp_BFu15ll) C1{ Fs:16 Fp FL:15}



static void Test_BFu16s_Vp_BFu15ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu15ll");
    static STRUCT_IF_C BFu16s_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu15ll, BFu16s_Vp_BFu15ll)
//============================================================================


struct  BFu16s_Vp_BFu15s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Vp_BFu15s) C1{ Fs:16 Fp Fs:15}



static void Test_BFu16s_Vp_BFu15s()
{
  {
    init_simple_test("BFu16s_Vp_BFu15s");
    static STRUCT_IF_C BFu16s_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu15s, BFu16s_Vp_BFu15s)
//============================================================================


struct  BFu16s_Vp_BFu16i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Vp_BFu16i) C1{ Fs:16 Fp Fi:16}



static void Test_BFu16s_Vp_BFu16i()
{
  {
    init_simple_test("BFu16s_Vp_BFu16i");
    static STRUCT_IF_C BFu16s_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu16i, BFu16s_Vp_BFu16i)
//============================================================================


struct  BFu16s_Vp_BFu16ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Vp_BFu16ll) C1{ Fs:16 Fp FL:16}



static void Test_BFu16s_Vp_BFu16ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu16ll");
    static STRUCT_IF_C BFu16s_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu16ll, BFu16s_Vp_BFu16ll)
//============================================================================


struct  BFu16s_Vp_BFu16s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Vp_BFu16s) C1{ Fs:16 Fp Fs:16}



static void Test_BFu16s_Vp_BFu16s()
{
  {
    init_simple_test("BFu16s_Vp_BFu16s");
    static STRUCT_IF_C BFu16s_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu16s, BFu16s_Vp_BFu16s)
//============================================================================


struct  BFu16s_Vp_BFu17i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Vp_BFu17i) C1{ Fs:16 Fp Fi:17}



static void Test_BFu16s_Vp_BFu17i()
{
  {
    init_simple_test("BFu16s_Vp_BFu17i");
    static STRUCT_IF_C BFu16s_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16s_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16s_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu17i, BFu16s_Vp_BFu17i)
//============================================================================


struct  BFu16s_Vp_BFu17ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Vp_BFu17ll) C1{ Fs:16 Fp FL:17}



static void Test_BFu16s_Vp_BFu17ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu17ll");
    static STRUCT_IF_C BFu16s_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16s_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16s_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu17ll, BFu16s_Vp_BFu17ll)
//============================================================================


struct  BFu16s_Vp_BFu1c  {
  unsigned short v1:16;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Vp_BFu1c) C1{ Fs:16 Fp Fc:1}



static void Test_BFu16s_Vp_BFu1c()
{
  {
    init_simple_test("BFu16s_Vp_BFu1c");
    static STRUCT_IF_C BFu16s_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu1c, BFu16s_Vp_BFu1c)
//============================================================================


struct  BFu16s_Vp_BFu1i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Vp_BFu1i) C1{ Fs:16 Fp Fi:1}



static void Test_BFu16s_Vp_BFu1i()
{
  {
    init_simple_test("BFu16s_Vp_BFu1i");
    static STRUCT_IF_C BFu16s_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu1i, BFu16s_Vp_BFu1i)
//============================================================================


struct  BFu16s_Vp_BFu1ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Vp_BFu1ll) C1{ Fs:16 Fp FL:1}



static void Test_BFu16s_Vp_BFu1ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu1ll");
    static STRUCT_IF_C BFu16s_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu1ll, BFu16s_Vp_BFu1ll)
//============================================================================


struct  BFu16s_Vp_BFu1s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Vp_BFu1s) C1{ Fs:16 Fp Fs:1}



static void Test_BFu16s_Vp_BFu1s()
{
  {
    init_simple_test("BFu16s_Vp_BFu1s");
    static STRUCT_IF_C BFu16s_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu1s, BFu16s_Vp_BFu1s)
//============================================================================


struct  BFu16s_Vp_BFu31i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Vp_BFu31i) C1{ Fs:16 Fp Fi:31}



static void Test_BFu16s_Vp_BFu31i()
{
  {
    init_simple_test("BFu16s_Vp_BFu31i");
    static STRUCT_IF_C BFu16s_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16s_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16s_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu31i, BFu16s_Vp_BFu31i)
//============================================================================


struct  BFu16s_Vp_BFu31ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Vp_BFu31ll) C1{ Fs:16 Fp FL:31}



static void Test_BFu16s_Vp_BFu31ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu31ll");
    static STRUCT_IF_C BFu16s_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16s_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16s_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu31ll, BFu16s_Vp_BFu31ll)
//============================================================================


struct  BFu16s_Vp_BFu32i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Vp_BFu32i) C1{ Fs:16 Fp Fi:32}



static void Test_BFu16s_Vp_BFu32i()
{
  {
    init_simple_test("BFu16s_Vp_BFu32i");
    static STRUCT_IF_C BFu16s_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16s_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16s_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu32i, BFu16s_Vp_BFu32i)
//============================================================================


struct  BFu16s_Vp_BFu32ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Vp_BFu32ll) C1{ Fs:16 Fp FL:32}



static void Test_BFu16s_Vp_BFu32ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu32ll");
    static STRUCT_IF_C BFu16s_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16s_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16s_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu32ll, BFu16s_Vp_BFu32ll)
//============================================================================


struct  BFu16s_Vp_BFu33  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Vp_BFu33) C1{ Fs:16 Fp FL:33}



static void Test_BFu16s_Vp_BFu33()
{
  {
    init_simple_test("BFu16s_Vp_BFu33");
    static STRUCT_IF_C BFu16s_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu16s_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu16s_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu33, BFu16s_Vp_BFu33)
//============================================================================


struct  BFu16s_Vp_BFu7c  {
  unsigned short v1:16;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Vp_BFu7c) C1{ Fs:16 Fp Fc:7}



static void Test_BFu16s_Vp_BFu7c()
{
  {
    init_simple_test("BFu16s_Vp_BFu7c");
    static STRUCT_IF_C BFu16s_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu7c, BFu16s_Vp_BFu7c)
//============================================================================


struct  BFu16s_Vp_BFu7i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Vp_BFu7i) C1{ Fs:16 Fp Fi:7}



static void Test_BFu16s_Vp_BFu7i()
{
  {
    init_simple_test("BFu16s_Vp_BFu7i");
    static STRUCT_IF_C BFu16s_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu7i, BFu16s_Vp_BFu7i)
//============================================================================


struct  BFu16s_Vp_BFu7ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Vp_BFu7ll) C1{ Fs:16 Fp FL:7}



static void Test_BFu16s_Vp_BFu7ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu7ll");
    static STRUCT_IF_C BFu16s_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu7ll, BFu16s_Vp_BFu7ll)
//============================================================================


struct  BFu16s_Vp_BFu7s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Vp_BFu7s) C1{ Fs:16 Fp Fs:7}



static void Test_BFu16s_Vp_BFu7s()
{
  {
    init_simple_test("BFu16s_Vp_BFu7s");
    static STRUCT_IF_C BFu16s_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu7s, BFu16s_Vp_BFu7s)
//============================================================================


struct  BFu16s_Vp_BFu8c  {
  unsigned short v1:16;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Vp_BFu8c) C1{ Fs:16 Fp Fc:8}



static void Test_BFu16s_Vp_BFu8c()
{
  {
    init_simple_test("BFu16s_Vp_BFu8c");
    static STRUCT_IF_C BFu16s_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu8c, BFu16s_Vp_BFu8c)
//============================================================================


struct  BFu16s_Vp_BFu8i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Vp_BFu8i) C1{ Fs:16 Fp Fi:8}



static void Test_BFu16s_Vp_BFu8i()
{
  {
    init_simple_test("BFu16s_Vp_BFu8i");
    static STRUCT_IF_C BFu16s_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu8i, BFu16s_Vp_BFu8i)
//============================================================================


struct  BFu16s_Vp_BFu8ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Vp_BFu8ll) C1{ Fs:16 Fp FL:8}



static void Test_BFu16s_Vp_BFu8ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu8ll");
    static STRUCT_IF_C BFu16s_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu8ll, BFu16s_Vp_BFu8ll)
//============================================================================


struct  BFu16s_Vp_BFu8s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Vp_BFu8s) C1{ Fs:16 Fp Fs:8}



static void Test_BFu16s_Vp_BFu8s()
{
  {
    init_simple_test("BFu16s_Vp_BFu8s");
    static STRUCT_IF_C BFu16s_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu8s, BFu16s_Vp_BFu8s)
//============================================================================


struct  BFu16s_Vp_BFu9i  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Vp_BFu9i) C1{ Fs:16 Fp Fi:9}



static void Test_BFu16s_Vp_BFu9i()
{
  {
    init_simple_test("BFu16s_Vp_BFu9i");
    static STRUCT_IF_C BFu16s_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu9i, BFu16s_Vp_BFu9i)
//============================================================================


struct  BFu16s_Vp_BFu9ll  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Vp_BFu9ll) C1{ Fs:16 Fp FL:9}



static void Test_BFu16s_Vp_BFu9ll()
{
  {
    init_simple_test("BFu16s_Vp_BFu9ll");
    static STRUCT_IF_C BFu16s_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu9ll, BFu16s_Vp_BFu9ll)
//============================================================================


struct  BFu16s_Vp_BFu9s  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Vp_BFu9s) C1{ Fs:16 Fp Fs:9}



static void Test_BFu16s_Vp_BFu9s()
{
  {
    init_simple_test("BFu16s_Vp_BFu9s");
    static STRUCT_IF_C BFu16s_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_BFu9s, BFu16s_Vp_BFu9s)
//============================================================================


struct  BFu16s_Vp_C  {
  unsigned short v1:16;
  void *v2;
  char v3;
};
//SIG(1 BFu16s_Vp_C) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Vp_C()
{
  {
    init_simple_test("BFu16s_Vp_C");
    static STRUCT_IF_C BFu16s_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_C, BFu16s_Vp_C)
//============================================================================


struct  BFu16s_Vp_D  {
  unsigned short v1:16;
  void *v2;
  double v3;
};
//SIG(1 BFu16s_Vp_D) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Vp_D()
{
  {
    init_simple_test("BFu16s_Vp_D");
    static STRUCT_IF_C BFu16s_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_D, BFu16s_Vp_D)
//============================================================================


struct  BFu16s_Vp_F  {
  unsigned short v1:16;
  void *v2;
  float v3;
};
//SIG(1 BFu16s_Vp_F) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Vp_F()
{
  {
    init_simple_test("BFu16s_Vp_F");
    static STRUCT_IF_C BFu16s_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_F, BFu16s_Vp_F)
//============================================================================


struct  BFu16s_Vp_I  {
  unsigned short v1:16;
  void *v2;
  int v3;
};
//SIG(1 BFu16s_Vp_I) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Vp_I()
{
  {
    init_simple_test("BFu16s_Vp_I");
    static STRUCT_IF_C BFu16s_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_I, BFu16s_Vp_I)
//============================================================================


struct  BFu16s_Vp_Ip  {
  unsigned short v1:16;
  void *v2;
  int *v3;
};
//SIG(1 BFu16s_Vp_Ip) C1{ Fs:16 Fp[2]}



static void Test_BFu16s_Vp_Ip()
{
  {
    init_simple_test("BFu16s_Vp_Ip");
    static STRUCT_IF_C BFu16s_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Ip, BFu16s_Vp_Ip)
//============================================================================


struct  BFu16s_Vp_L  {
  unsigned short v1:16;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Vp_L) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Vp_L()
{
  {
    init_simple_test("BFu16s_Vp_L");
    static STRUCT_IF_C BFu16s_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_L, BFu16s_Vp_L)
//============================================================================


struct  BFu16s_Vp_S  {
  unsigned short v1:16;
  void *v2;
  short v3;
};
//SIG(1 BFu16s_Vp_S) C1{ Fs:16 Fp Fs}



static void Test_BFu16s_Vp_S()
{
  {
    init_simple_test("BFu16s_Vp_S");
    static STRUCT_IF_C BFu16s_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_S, BFu16s_Vp_S)
//============================================================================


struct  BFu16s_Vp_Uc  {
  unsigned short v1:16;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Vp_Uc) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Vp_Uc()
{
  {
    init_simple_test("BFu16s_Vp_Uc");
    static STRUCT_IF_C BFu16s_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Uc, BFu16s_Vp_Uc)
//============================================================================


struct  BFu16s_Vp_Ui  {
  unsigned short v1:16;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Vp_Ui) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Vp_Ui()
{
  {
    init_simple_test("BFu16s_Vp_Ui");
    static STRUCT_IF_C BFu16s_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Ui, BFu16s_Vp_Ui)
//============================================================================


struct  BFu16s_Vp_Ul  {
  unsigned short v1:16;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Vp_Ul) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Vp_Ul()
{
  {
    init_simple_test("BFu16s_Vp_Ul");
    static STRUCT_IF_C BFu16s_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Ul, BFu16s_Vp_Ul)
//============================================================================


struct  BFu16s_Vp_Us  {
  unsigned short v1:16;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Vp_Us) C1{ Fs:16 Fp Fs}



static void Test_BFu16s_Vp_Us()
{
  {
    init_simple_test("BFu16s_Vp_Us");
    static STRUCT_IF_C BFu16s_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Us, BFu16s_Vp_Us)
//============================================================================


struct  BFu16s_Vp_Vp  {
  unsigned short v1:16;
  void *v2;
  void *v3;
};
//SIG(1 BFu16s_Vp_Vp) C1{ Fs:16 Fp[2]}



static void Test_BFu16s_Vp_Vp()
{
  {
    init_simple_test("BFu16s_Vp_Vp");
    static STRUCT_IF_C BFu16s_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Vp_Vp, BFu16s_Vp_Vp)
//============================================================================


struct  BFu17i  {
  unsigned int v1:17;
};
//SIG(1 BFu17i) C1{ Fi:17}



static void Test_BFu17i()
{
  {
    init_simple_test("BFu17i");
    static STRUCT_IF_C BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i, BFu17i)
//============================================================================


struct  BFu17i_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
};
//SIG(1 BFu17i_BFs17i) C1{ Fi:17 Fi:17}



static void Test_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i, BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
  signed int v3:17;
};
//SIG(1 BFu17i_BFs17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFs17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17i, BFu17i_BFs17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17i_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFs17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17i_BFs17i, BFu17i_BFs17i_BFs17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17i_BFs17ll  {
  unsigned int v1:17;
  signed int v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17i_BFs17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17i_BFs17ll, BFu17i_BFs17i_BFs17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17i_BFs17i_BFu17i  {
  unsigned int v1:17;
  signed int v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFs17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17i_BFu17i, BFu17i_BFs17i_BFs17i_BFu17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17i_BFu17ll  {
  unsigned int v1:17;
  signed int v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17i_BFu17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17i_BFu17ll, BFu17i_BFs17i_BFs17i_BFu17ll)
//============================================================================


struct  BFu17i_BFs17i_BFs17ll  {
  unsigned int v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17i_BFs17i_BFs17ll) C1{ Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17ll, BFu17i_BFs17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17i_BFs17ll_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17ll_BFs17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17i_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17ll_BFs17i, BFu17i_BFs17i_BFs17ll_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17ll_BFs17ll  {
  unsigned int v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17ll_BFs17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17i_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17ll_BFs17ll, BFu17i_BFs17i_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFs17i_BFs17ll_BFu17i  {
  unsigned int v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17ll_BFu17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17i_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17ll_BFu17i, BFu17i_BFs17i_BFs17ll_BFu17i)
//============================================================================


struct  BFu17i_BFs17i_BFs17ll_BFu17ll  {
  unsigned int v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFs17ll_BFu17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17i_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFs17ll_BFu17ll, BFu17i_BFs17i_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFs17i_BFu17i  {
  unsigned int v1:17;
  signed int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFs17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFs17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17i, BFu17i_BFs17i_BFu17i)
//============================================================================


struct  BFu17i_BFs17i_BFu17i_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFu17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17i_BFs17i, BFu17i_BFs17i_BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFu17i_BFs17ll  {
  unsigned int v1:17;
  signed int v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17i_BFs17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17i_BFs17ll, BFu17i_BFs17i_BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17i_BFu17i_BFu17i  {
  unsigned int v1:17;
  signed int v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFs17i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17i_BFu17i, BFu17i_BFs17i_BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFs17i_BFu17i_BFu17ll  {
  unsigned int v1:17;
  signed int v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17i_BFu17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFs17i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17i_BFu17ll, BFu17i_BFs17i_BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFs17i_BFu17ll  {
  unsigned int v1:17;
  signed int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFs17i_BFu17ll) C1{ Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17ll, BFu17i_BFs17i_BFu17ll)
//============================================================================


struct  BFu17i_BFs17i_BFu17ll_BFs17i  {
  unsigned int v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17ll_BFs17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17i_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17ll_BFs17i, BFu17i_BFs17i_BFu17ll_BFs17i)
//============================================================================


struct  BFu17i_BFs17i_BFu17ll_BFs17ll  {
  unsigned int v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17ll_BFs17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17i_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17ll_BFs17ll, BFu17i_BFs17i_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFs17i_BFu17ll_BFu17i  {
  unsigned int v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17ll_BFu17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17ll_BFu17i, BFu17i_BFs17i_BFu17ll_BFu17i)
//============================================================================


struct  BFu17i_BFs17i_BFu17ll_BFu17ll  {
  unsigned int v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17i_BFu17ll_BFu17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17i_BFs17i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17i_BFu17ll_BFu17ll, BFu17i_BFs17i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
};
//SIG(1 BFu17i_BFs17ll) C1{ Fi:17 FL:17}



static void Test_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll, BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFs17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17i) C1{ Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17i, BFu17i_BFs17ll_BFs17i)
//============================================================================


struct  BFu17i_BFs17ll_BFs17i_BFs17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17i_BFs17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17i_BFs17i, BFu17i_BFs17ll_BFs17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17ll_BFs17i_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17i_BFs17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17ll_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17i_BFs17ll, BFu17i_BFs17ll_BFs17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFs17i_BFu17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17i_BFu17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17i_BFu17i, BFu17i_BFs17ll_BFs17i_BFu17i)
//============================================================================


struct  BFu17i_BFs17ll_BFs17i_BFu17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17i_BFu17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17ll_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17i_BFu17ll, BFu17i_BFs17ll_BFs17i_BFu17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17ll, BFu17i_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFs17ll_BFs17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17ll_BFs17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17ll_BFs17i, BFu17i_BFs17ll_BFs17ll_BFs17i)
//============================================================================


struct  BFu17i_BFs17ll_BFs17ll_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17ll_BFs17ll, BFu17i_BFs17ll_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFs17ll_BFu17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17ll_BFu17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17ll_BFu17i, BFu17i_BFs17ll_BFs17ll_BFu17i)
//============================================================================


struct  BFu17i_BFs17ll_BFs17ll_BFu17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFs17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFs17ll_BFu17ll, BFu17i_BFs17ll_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFu17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17i) C1{ Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17i, BFu17i_BFs17ll_BFu17i)
//============================================================================


struct  BFu17i_BFs17ll_BFu17i_BFs17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17i_BFs17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17i_BFs17i, BFu17i_BFs17ll_BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFs17ll_BFu17i_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17i_BFs17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17ll_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17i_BFs17ll, BFu17i_BFs17ll_BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFu17i_BFu17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17i_BFu17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17i_BFu17i, BFu17i_BFs17ll_BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFs17ll_BFu17i_BFu17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17i_BFu17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFs17ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17i_BFu17ll, BFu17i_BFs17ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFu17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17ll, BFu17i_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFu17ll_BFs17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17ll_BFs17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17ll_BFs17i, BFu17i_BFs17ll_BFu17ll_BFs17i)
//============================================================================


struct  BFu17i_BFs17ll_BFu17ll_BFs17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17ll_BFs17ll, BFu17i_BFs17ll_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFs17ll_BFu17ll_BFu17i  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17ll_BFu17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFs17ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17ll_BFu17i, BFu17i_BFs17ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu17i_BFs17ll_BFu17ll_BFu17ll  {
  unsigned int v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFs17ll_BFu17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFs17ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFs17ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFs17ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFs17ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFs17ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFs17ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFs17ll_BFu17ll_BFu17ll, BFu17i_BFs17ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu17i_BFu15i) C1{ Fi:17 Fi:15}



static void Test_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i, BFu17i_BFu15i)
//============================================================================


struct  BFu17i_BFu15i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu15i_BFu15i) C1{ Fi:17 Fi:15 Fi:15}



static void Test_BFu17i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu15i, BFu17i_BFu15i_BFu15i)
//============================================================================


struct  BFu17i_BFu15i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu15i_BFu15ll) C1{ Fi:17 Fi:15 FL:15}



static void Test_BFu17i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu15ll, BFu17i_BFu15i_BFu15ll)
//============================================================================


struct  BFu17i_BFu15i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu15i_BFu15s) C1{ Fi:17 Fi:15 Fs:15}



static void Test_BFu17i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu15s, BFu17i_BFu15i_BFu15s)
//============================================================================


struct  BFu17i_BFu15i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu15i_BFu16i) C1{ Fi:17 Fi:15 Fi:16}



static void Test_BFu17i_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu16i, BFu17i_BFu15i_BFu16i)
//============================================================================


struct  BFu17i_BFu15i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu15i_BFu16ll) C1{ Fi:17 Fi:15 FL:16}



static void Test_BFu17i_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu16ll, BFu17i_BFu15i_BFu16ll)
//============================================================================


struct  BFu17i_BFu15i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu15i_BFu16s) C1{ Fi:17 Fi:15 Fs:16}



static void Test_BFu17i_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu16s, BFu17i_BFu15i_BFu16s)
//============================================================================


struct  BFu17i_BFu15i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu15i_BFu17i) C1{ Fi:17 Fi:15 Fi:17}



static void Test_BFu17i_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu17i, BFu17i_BFu15i_BFu17i)
//============================================================================


struct  BFu17i_BFu15i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu15i_BFu17ll) C1{ Fi:17 Fi:15 FL:17}



static void Test_BFu17i_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu17ll, BFu17i_BFu15i_BFu17ll)
//============================================================================


struct  BFu17i_BFu15i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu15i_BFu1c) C1{ Fi:17 Fi:15 Fc:1}



static void Test_BFu17i_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu15i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu1c, BFu17i_BFu15i_BFu1c)
//============================================================================


struct  BFu17i_BFu15i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu15i_BFu1i) C1{ Fi:17 Fi:15 Fi:1}



static void Test_BFu17i_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu1i, BFu17i_BFu15i_BFu1i)
//============================================================================


struct  BFu17i_BFu15i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu15i_BFu1ll) C1{ Fi:17 Fi:15 FL:1}



static void Test_BFu17i_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu1ll, BFu17i_BFu15i_BFu1ll)
//============================================================================


struct  BFu17i_BFu15i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu15i_BFu1s) C1{ Fi:17 Fi:15 Fs:1}



static void Test_BFu17i_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu1s, BFu17i_BFu15i_BFu1s)
//============================================================================


struct  BFu17i_BFu15i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu15i_BFu31i) C1{ Fi:17 Fi:15 Fi:31}



static void Test_BFu17i_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu31i, BFu17i_BFu15i_BFu31i)
//============================================================================


struct  BFu17i_BFu15i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu15i_BFu31ll) C1{ Fi:17 Fi:15 FL:31}



static void Test_BFu17i_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu31ll, BFu17i_BFu15i_BFu31ll)
//============================================================================


struct  BFu17i_BFu15i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu15i_BFu32i) C1{ Fi:17 Fi:15 Fi:32}



static void Test_BFu17i_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu32i, BFu17i_BFu15i_BFu32i)
//============================================================================


struct  BFu17i_BFu15i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu15i_BFu32ll) C1{ Fi:17 Fi:15 FL:32}



static void Test_BFu17i_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu32ll, BFu17i_BFu15i_BFu32ll)
//============================================================================


struct  BFu17i_BFu15i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu15i_BFu33) C1{ Fi:17 Fi:15 FL:33}



static void Test_BFu17i_BFu15i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu33");
    static STRUCT_IF_C BFu17i_BFu15i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu33, BFu17i_BFu15i_BFu33)
//============================================================================


struct  BFu17i_BFu15i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu15i_BFu7c) C1{ Fi:17 Fi:15 Fc:7}



static void Test_BFu17i_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu7c, BFu17i_BFu15i_BFu7c)
//============================================================================


struct  BFu17i_BFu15i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu15i_BFu7i) C1{ Fi:17 Fi:15 Fi:7}



static void Test_BFu17i_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu7i, BFu17i_BFu15i_BFu7i)
//============================================================================


struct  BFu17i_BFu15i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu15i_BFu7ll) C1{ Fi:17 Fi:15 FL:7}



static void Test_BFu17i_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu7ll, BFu17i_BFu15i_BFu7ll)
//============================================================================


struct  BFu17i_BFu15i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu15i_BFu7s) C1{ Fi:17 Fi:15 Fs:7}



static void Test_BFu17i_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu7s, BFu17i_BFu15i_BFu7s)
//============================================================================


struct  BFu17i_BFu15i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu15i_BFu8c) C1{ Fi:17 Fi:15 Fc:8}



static void Test_BFu17i_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu8c, BFu17i_BFu15i_BFu8c)
//============================================================================


struct  BFu17i_BFu15i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu15i_BFu8i) C1{ Fi:17 Fi:15 Fi:8}



static void Test_BFu17i_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu8i, BFu17i_BFu15i_BFu8i)
//============================================================================


struct  BFu17i_BFu15i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu15i_BFu8ll) C1{ Fi:17 Fi:15 FL:8}



static void Test_BFu17i_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu8ll, BFu17i_BFu15i_BFu8ll)
//============================================================================


struct  BFu17i_BFu15i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu15i_BFu8s) C1{ Fi:17 Fi:15 Fs:8}



static void Test_BFu17i_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu8s, BFu17i_BFu15i_BFu8s)
//============================================================================


struct  BFu17i_BFu15i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu15i_BFu9i) C1{ Fi:17 Fi:15 Fi:9}



static void Test_BFu17i_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu9i, BFu17i_BFu15i_BFu9i)
//============================================================================


struct  BFu17i_BFu15i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu15i_BFu9ll) C1{ Fi:17 Fi:15 FL:9}



static void Test_BFu17i_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu9ll, BFu17i_BFu15i_BFu9ll)
//============================================================================


struct  BFu17i_BFu15i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu15i_BFu9s) C1{ Fi:17 Fi:15 Fs:9}



static void Test_BFu17i_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu15i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_BFu9s, BFu17i_BFu15i_BFu9s)
//============================================================================


struct  BFu17i_BFu15i_C  {
  unsigned int v1:17;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu17i_BFu15i_C) C1{ Fi:17 Fi:15 Fc}



static void Test_BFu17i_BFu15i_C()
{
  {
    init_simple_test("BFu17i_BFu15i_C");
    static STRUCT_IF_C BFu17i_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_C, BFu17i_BFu15i_C)
//============================================================================


struct  BFu17i_BFu15i_D  {
  unsigned int v1:17;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu17i_BFu15i_D) C1{ Fi:17 Fi:15 FL}



static void Test_BFu17i_BFu15i_D()
{
  {
    init_simple_test("BFu17i_BFu15i_D");
    static STRUCT_IF_C BFu17i_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_D, BFu17i_BFu15i_D)
//============================================================================


struct  BFu17i_BFu15i_F  {
  unsigned int v1:17;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu17i_BFu15i_F) C1{ Fi:17 Fi:15 Fi}



static void Test_BFu17i_BFu15i_F()
{
  {
    init_simple_test("BFu17i_BFu15i_F");
    static STRUCT_IF_C BFu17i_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_F, BFu17i_BFu15i_F)
//============================================================================


struct  BFu17i_BFu15i_I  {
  unsigned int v1:17;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu17i_BFu15i_I) C1{ Fi:17 Fi:15 Fi}



static void Test_BFu17i_BFu15i_I()
{
  {
    init_simple_test("BFu17i_BFu15i_I");
    static STRUCT_IF_C BFu17i_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_I, BFu17i_BFu15i_I)
//============================================================================


struct  BFu17i_BFu15i_Ip  {
  unsigned int v1:17;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu17i_BFu15i_Ip) C1{ Fi:17 Fi:15 Fp}



static void Test_BFu17i_BFu15i_Ip()
{
  {
    init_simple_test("BFu17i_BFu15i_Ip");
    static STRUCT_IF_C BFu17i_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Ip, BFu17i_BFu15i_Ip)
//============================================================================


struct  BFu17i_BFu15i_L  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu15i_L) C1{ Fi:17 Fi:15 FL}



static void Test_BFu17i_BFu15i_L()
{
  {
    init_simple_test("BFu17i_BFu15i_L");
    static STRUCT_IF_C BFu17i_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_L, BFu17i_BFu15i_L)
//============================================================================


struct  BFu17i_BFu15i_S  {
  unsigned int v1:17;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu17i_BFu15i_S) C1{ Fi:17 Fi:15 Fs}



static void Test_BFu17i_BFu15i_S()
{
  {
    init_simple_test("BFu17i_BFu15i_S");
    static STRUCT_IF_C BFu17i_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_S, BFu17i_BFu15i_S)
//============================================================================


struct  BFu17i_BFu15i_Uc  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu15i_Uc) C1{ Fi:17 Fi:15 Fc}



static void Test_BFu17i_BFu15i_Uc()
{
  {
    init_simple_test("BFu17i_BFu15i_Uc");
    static STRUCT_IF_C BFu17i_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Uc, BFu17i_BFu15i_Uc)
//============================================================================


struct  BFu17i_BFu15i_Ui  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu15i_Ui) C1{ Fi:17 Fi:15 Fi}



static void Test_BFu17i_BFu15i_Ui()
{
  {
    init_simple_test("BFu17i_BFu15i_Ui");
    static STRUCT_IF_C BFu17i_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Ui, BFu17i_BFu15i_Ui)
//============================================================================


struct  BFu17i_BFu15i_Ul  {
  unsigned int v1:17;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu15i_Ul) C1{ Fi:17 Fi:15 FL}



static void Test_BFu17i_BFu15i_Ul()
{
  {
    init_simple_test("BFu17i_BFu15i_Ul");
    static STRUCT_IF_C BFu17i_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Ul, BFu17i_BFu15i_Ul)
//============================================================================


struct  BFu17i_BFu15i_Us  {
  unsigned int v1:17;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu15i_Us) C1{ Fi:17 Fi:15 Fs}



static void Test_BFu17i_BFu15i_Us()
{
  {
    init_simple_test("BFu17i_BFu15i_Us");
    static STRUCT_IF_C BFu17i_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Us, BFu17i_BFu15i_Us)
//============================================================================


struct  BFu17i_BFu15i_Vp  {
  unsigned int v1:17;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu17i_BFu15i_Vp) C1{ Fi:17 Fi:15 Fp}



static void Test_BFu17i_BFu15i_Vp()
{
  {
    init_simple_test("BFu17i_BFu15i_Vp");
    static STRUCT_IF_C BFu17i_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15i_Vp, BFu17i_BFu15i_Vp)
//============================================================================


struct  BFu17i_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu17i_BFu15ll) C1{ Fi:17 FL:15}



static void Test_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll, BFu17i_BFu15ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu15ll_BFu15i) C1{ Fi:17 FL:15 Fi:15}



static void Test_BFu17i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu15i, BFu17i_BFu15ll_BFu15i)
//============================================================================


struct  BFu17i_BFu15ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu15ll_BFu15ll) C1{ Fi:17 FL:15 FL:15}



static void Test_BFu17i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu15ll, BFu17i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu15ll_BFu15s) C1{ Fi:17 FL:15 Fs:15}



static void Test_BFu17i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu15s, BFu17i_BFu15ll_BFu15s)
//============================================================================


struct  BFu17i_BFu15ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu15ll_BFu16i) C1{ Fi:17 FL:15 Fi:16}



static void Test_BFu17i_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu16i, BFu17i_BFu15ll_BFu16i)
//============================================================================


struct  BFu17i_BFu15ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu15ll_BFu16ll) C1{ Fi:17 FL:15 FL:16}



static void Test_BFu17i_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu16ll, BFu17i_BFu15ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu15ll_BFu16s) C1{ Fi:17 FL:15 Fs:16}



static void Test_BFu17i_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu16s, BFu17i_BFu15ll_BFu16s)
//============================================================================


struct  BFu17i_BFu15ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu15ll_BFu17i) C1{ Fi:17 FL:15 Fi:17}



static void Test_BFu17i_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu17i, BFu17i_BFu15ll_BFu17i)
//============================================================================


struct  BFu17i_BFu15ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu15ll_BFu17ll) C1{ Fi:17 FL:15 FL:17}



static void Test_BFu17i_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu17ll, BFu17i_BFu15ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu15ll_BFu1c) C1{ Fi:17 FL:15 Fc:1}



static void Test_BFu17i_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu1c, BFu17i_BFu15ll_BFu1c)
//============================================================================


struct  BFu17i_BFu15ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu15ll_BFu1i) C1{ Fi:17 FL:15 Fi:1}



static void Test_BFu17i_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu1i, BFu17i_BFu15ll_BFu1i)
//============================================================================


struct  BFu17i_BFu15ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu15ll_BFu1ll) C1{ Fi:17 FL:15 FL:1}



static void Test_BFu17i_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu1ll, BFu17i_BFu15ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu15ll_BFu1s) C1{ Fi:17 FL:15 Fs:1}



static void Test_BFu17i_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu1s, BFu17i_BFu15ll_BFu1s)
//============================================================================


struct  BFu17i_BFu15ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu15ll_BFu31i) C1{ Fi:17 FL:15 Fi:31}



static void Test_BFu17i_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu31i, BFu17i_BFu15ll_BFu31i)
//============================================================================


struct  BFu17i_BFu15ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu15ll_BFu31ll) C1{ Fi:17 FL:15 FL:31}



static void Test_BFu17i_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu31ll, BFu17i_BFu15ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu15ll_BFu32i) C1{ Fi:17 FL:15 Fi:32}



static void Test_BFu17i_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu32i, BFu17i_BFu15ll_BFu32i)
//============================================================================


struct  BFu17i_BFu15ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu15ll_BFu32ll) C1{ Fi:17 FL:15 FL:32}



static void Test_BFu17i_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu32ll, BFu17i_BFu15ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu15ll_BFu33) C1{ Fi:17 FL:15 FL:33}



static void Test_BFu17i_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu33, BFu17i_BFu15ll_BFu33)
//============================================================================


struct  BFu17i_BFu15ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu15ll_BFu7c) C1{ Fi:17 FL:15 Fc:7}



static void Test_BFu17i_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu7c, BFu17i_BFu15ll_BFu7c)
//============================================================================


struct  BFu17i_BFu15ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu15ll_BFu7i) C1{ Fi:17 FL:15 Fi:7}



static void Test_BFu17i_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu7i, BFu17i_BFu15ll_BFu7i)
//============================================================================


struct  BFu17i_BFu15ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu15ll_BFu7ll) C1{ Fi:17 FL:15 FL:7}



static void Test_BFu17i_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu7ll, BFu17i_BFu15ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu15ll_BFu7s) C1{ Fi:17 FL:15 Fs:7}



static void Test_BFu17i_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu7s, BFu17i_BFu15ll_BFu7s)
//============================================================================


struct  BFu17i_BFu15ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu15ll_BFu8c) C1{ Fi:17 FL:15 Fc:8}



static void Test_BFu17i_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu8c, BFu17i_BFu15ll_BFu8c)
//============================================================================


struct  BFu17i_BFu15ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu15ll_BFu8i) C1{ Fi:17 FL:15 Fi:8}



static void Test_BFu17i_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu8i, BFu17i_BFu15ll_BFu8i)
//============================================================================


struct  BFu17i_BFu15ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu15ll_BFu8ll) C1{ Fi:17 FL:15 FL:8}



static void Test_BFu17i_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu8ll, BFu17i_BFu15ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu15ll_BFu8s) C1{ Fi:17 FL:15 Fs:8}



static void Test_BFu17i_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu8s, BFu17i_BFu15ll_BFu8s)
//============================================================================


struct  BFu17i_BFu15ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu15ll_BFu9i) C1{ Fi:17 FL:15 Fi:9}



static void Test_BFu17i_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu9i, BFu17i_BFu15ll_BFu9i)
//============================================================================


struct  BFu17i_BFu15ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu15ll_BFu9ll) C1{ Fi:17 FL:15 FL:9}



static void Test_BFu17i_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu9ll, BFu17i_BFu15ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu15ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu15ll_BFu9s) C1{ Fi:17 FL:15 Fs:9}



static void Test_BFu17i_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_BFu9s, BFu17i_BFu15ll_BFu9s)
//============================================================================


struct  BFu17i_BFu15ll_C  {
  unsigned int v1:17;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu17i_BFu15ll_C) C1{ Fi:17 FL:15 Fc}



static void Test_BFu17i_BFu15ll_C()
{
  {
    init_simple_test("BFu17i_BFu15ll_C");
    static STRUCT_IF_C BFu17i_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_C, BFu17i_BFu15ll_C)
//============================================================================


struct  BFu17i_BFu15ll_D  {
  unsigned int v1:17;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu17i_BFu15ll_D) C1{ Fi:17 FL:15 FL}



static void Test_BFu17i_BFu15ll_D()
{
  {
    init_simple_test("BFu17i_BFu15ll_D");
    static STRUCT_IF_C BFu17i_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_D, BFu17i_BFu15ll_D)
//============================================================================


struct  BFu17i_BFu15ll_F  {
  unsigned int v1:17;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu17i_BFu15ll_F) C1{ Fi:17 FL:15 Fi}



static void Test_BFu17i_BFu15ll_F()
{
  {
    init_simple_test("BFu17i_BFu15ll_F");
    static STRUCT_IF_C BFu17i_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_F, BFu17i_BFu15ll_F)
//============================================================================


struct  BFu17i_BFu15ll_I  {
  unsigned int v1:17;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu17i_BFu15ll_I) C1{ Fi:17 FL:15 Fi}



static void Test_BFu17i_BFu15ll_I()
{
  {
    init_simple_test("BFu17i_BFu15ll_I");
    static STRUCT_IF_C BFu17i_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_I, BFu17i_BFu15ll_I)
//============================================================================


struct  BFu17i_BFu15ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu17i_BFu15ll_Ip) C1{ Fi:17 FL:15 Fp}



static void Test_BFu17i_BFu15ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu15ll_Ip");
    static STRUCT_IF_C BFu17i_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Ip, BFu17i_BFu15ll_Ip)
//============================================================================


struct  BFu17i_BFu15ll_L  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu15ll_L) C1{ Fi:17 FL:15 FL}



static void Test_BFu17i_BFu15ll_L()
{
  {
    init_simple_test("BFu17i_BFu15ll_L");
    static STRUCT_IF_C BFu17i_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_L, BFu17i_BFu15ll_L)
//============================================================================


struct  BFu17i_BFu15ll_S  {
  unsigned int v1:17;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu17i_BFu15ll_S) C1{ Fi:17 FL:15 Fs}



static void Test_BFu17i_BFu15ll_S()
{
  {
    init_simple_test("BFu17i_BFu15ll_S");
    static STRUCT_IF_C BFu17i_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_S, BFu17i_BFu15ll_S)
//============================================================================


struct  BFu17i_BFu15ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu15ll_Uc) C1{ Fi:17 FL:15 Fc}



static void Test_BFu17i_BFu15ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu15ll_Uc");
    static STRUCT_IF_C BFu17i_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Uc, BFu17i_BFu15ll_Uc)
//============================================================================


struct  BFu17i_BFu15ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu15ll_Ui) C1{ Fi:17 FL:15 Fi}



static void Test_BFu17i_BFu15ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu15ll_Ui");
    static STRUCT_IF_C BFu17i_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Ui, BFu17i_BFu15ll_Ui)
//============================================================================


struct  BFu17i_BFu15ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu15ll_Ul) C1{ Fi:17 FL:15 FL}



static void Test_BFu17i_BFu15ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu15ll_Ul");
    static STRUCT_IF_C BFu17i_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Ul, BFu17i_BFu15ll_Ul)
//============================================================================


struct  BFu17i_BFu15ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu15ll_Us) C1{ Fi:17 FL:15 Fs}



static void Test_BFu17i_BFu15ll_Us()
{
  {
    init_simple_test("BFu17i_BFu15ll_Us");
    static STRUCT_IF_C BFu17i_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Us, BFu17i_BFu15ll_Us)
//============================================================================


struct  BFu17i_BFu15ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu17i_BFu15ll_Vp) C1{ Fi:17 FL:15 Fp}



static void Test_BFu17i_BFu15ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu15ll_Vp");
    static STRUCT_IF_C BFu17i_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15ll_Vp, BFu17i_BFu15ll_Vp)
//============================================================================


struct  BFu17i_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu17i_BFu15s) C1{ Fi:17 Fs:15}



static void Test_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s, BFu17i_BFu15s)
//============================================================================


struct  BFu17i_BFu15s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu15s_BFu15i) C1{ Fi:17 Fs:15 Fi:15}



static void Test_BFu17i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu15i, BFu17i_BFu15s_BFu15i)
//============================================================================


struct  BFu17i_BFu15s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu15s_BFu15ll) C1{ Fi:17 Fs:15 FL:15}



static void Test_BFu17i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu15ll, BFu17i_BFu15s_BFu15ll)
//============================================================================


struct  BFu17i_BFu15s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu15s_BFu15s) C1{ Fi:17 Fs:15 Fs:15}



static void Test_BFu17i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu15s, BFu17i_BFu15s_BFu15s)
//============================================================================


struct  BFu17i_BFu15s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu15s_BFu16i) C1{ Fi:17 Fs:15 Fi:16}



static void Test_BFu17i_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu16i, BFu17i_BFu15s_BFu16i)
//============================================================================


struct  BFu17i_BFu15s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu15s_BFu16ll) C1{ Fi:17 Fs:15 FL:16}



static void Test_BFu17i_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu16ll, BFu17i_BFu15s_BFu16ll)
//============================================================================


struct  BFu17i_BFu15s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu15s_BFu16s) C1{ Fi:17 Fs:15 Fs:16}



static void Test_BFu17i_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu16s, BFu17i_BFu15s_BFu16s)
//============================================================================


struct  BFu17i_BFu15s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu15s_BFu17i) C1{ Fi:17 Fs:15 Fi:17}



static void Test_BFu17i_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu17i, BFu17i_BFu15s_BFu17i)
//============================================================================


struct  BFu17i_BFu15s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu15s_BFu17ll) C1{ Fi:17 Fs:15 FL:17}



static void Test_BFu17i_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu17ll, BFu17i_BFu15s_BFu17ll)
//============================================================================


struct  BFu17i_BFu15s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu15s_BFu1c) C1{ Fi:17 Fs:15 Fc:1}



static void Test_BFu17i_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu15s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu1c, BFu17i_BFu15s_BFu1c)
//============================================================================


struct  BFu17i_BFu15s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu15s_BFu1i) C1{ Fi:17 Fs:15 Fi:1}



static void Test_BFu17i_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu1i, BFu17i_BFu15s_BFu1i)
//============================================================================


struct  BFu17i_BFu15s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu15s_BFu1ll) C1{ Fi:17 Fs:15 FL:1}



static void Test_BFu17i_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu1ll, BFu17i_BFu15s_BFu1ll)
//============================================================================


struct  BFu17i_BFu15s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu15s_BFu1s) C1{ Fi:17 Fs:15 Fs:1}



static void Test_BFu17i_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu1s, BFu17i_BFu15s_BFu1s)
//============================================================================


struct  BFu17i_BFu15s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu15s_BFu31i) C1{ Fi:17 Fs:15 Fi:31}



static void Test_BFu17i_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu31i, BFu17i_BFu15s_BFu31i)
//============================================================================


struct  BFu17i_BFu15s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu15s_BFu31ll) C1{ Fi:17 Fs:15 FL:31}



static void Test_BFu17i_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu31ll, BFu17i_BFu15s_BFu31ll)
//============================================================================


struct  BFu17i_BFu15s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu15s_BFu32i) C1{ Fi:17 Fs:15 Fi:32}



static void Test_BFu17i_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu32i, BFu17i_BFu15s_BFu32i)
//============================================================================


struct  BFu17i_BFu15s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu15s_BFu32ll) C1{ Fi:17 Fs:15 FL:32}



static void Test_BFu17i_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu32ll, BFu17i_BFu15s_BFu32ll)
//============================================================================


struct  BFu17i_BFu15s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu15s_BFu33) C1{ Fi:17 Fs:15 FL:33}



static void Test_BFu17i_BFu15s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu33");
    static STRUCT_IF_C BFu17i_BFu15s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu33, BFu17i_BFu15s_BFu33)
//============================================================================


struct  BFu17i_BFu15s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu15s_BFu7c) C1{ Fi:17 Fs:15 Fc:7}



static void Test_BFu17i_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu7c, BFu17i_BFu15s_BFu7c)
//============================================================================


struct  BFu17i_BFu15s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu15s_BFu7i) C1{ Fi:17 Fs:15 Fi:7}



static void Test_BFu17i_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu7i, BFu17i_BFu15s_BFu7i)
//============================================================================


struct  BFu17i_BFu15s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu15s_BFu7ll) C1{ Fi:17 Fs:15 FL:7}



static void Test_BFu17i_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu7ll, BFu17i_BFu15s_BFu7ll)
//============================================================================


struct  BFu17i_BFu15s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu15s_BFu7s) C1{ Fi:17 Fs:15 Fs:7}



static void Test_BFu17i_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu7s, BFu17i_BFu15s_BFu7s)
//============================================================================


struct  BFu17i_BFu15s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu15s_BFu8c) C1{ Fi:17 Fs:15 Fc:8}



static void Test_BFu17i_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu8c, BFu17i_BFu15s_BFu8c)
//============================================================================


struct  BFu17i_BFu15s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu15s_BFu8i) C1{ Fi:17 Fs:15 Fi:8}



static void Test_BFu17i_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu8i, BFu17i_BFu15s_BFu8i)
//============================================================================


struct  BFu17i_BFu15s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu15s_BFu8ll) C1{ Fi:17 Fs:15 FL:8}



static void Test_BFu17i_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu8ll, BFu17i_BFu15s_BFu8ll)
//============================================================================


struct  BFu17i_BFu15s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu15s_BFu8s) C1{ Fi:17 Fs:15 Fs:8}



static void Test_BFu17i_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu8s, BFu17i_BFu15s_BFu8s)
//============================================================================


struct  BFu17i_BFu15s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu15s_BFu9i) C1{ Fi:17 Fs:15 Fi:9}



static void Test_BFu17i_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu9i, BFu17i_BFu15s_BFu9i)
//============================================================================


struct  BFu17i_BFu15s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu15s_BFu9ll) C1{ Fi:17 Fs:15 FL:9}



static void Test_BFu17i_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu9ll, BFu17i_BFu15s_BFu9ll)
//============================================================================


struct  BFu17i_BFu15s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu15s_BFu9s) C1{ Fi:17 Fs:15 Fs:9}



static void Test_BFu17i_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu15s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_BFu9s, BFu17i_BFu15s_BFu9s)
//============================================================================


struct  BFu17i_BFu15s_C  {
  unsigned int v1:17;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu17i_BFu15s_C) C1{ Fi:17 Fs:15 Fc}



static void Test_BFu17i_BFu15s_C()
{
  {
    init_simple_test("BFu17i_BFu15s_C");
    static STRUCT_IF_C BFu17i_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_C, BFu17i_BFu15s_C)
//============================================================================


struct  BFu17i_BFu15s_D  {
  unsigned int v1:17;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu17i_BFu15s_D) C1{ Fi:17 Fs:15 FL}



static void Test_BFu17i_BFu15s_D()
{
  {
    init_simple_test("BFu17i_BFu15s_D");
    static STRUCT_IF_C BFu17i_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_D, BFu17i_BFu15s_D)
//============================================================================


struct  BFu17i_BFu15s_F  {
  unsigned int v1:17;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu17i_BFu15s_F) C1{ Fi:17 Fs:15 Fi}



static void Test_BFu17i_BFu15s_F()
{
  {
    init_simple_test("BFu17i_BFu15s_F");
    static STRUCT_IF_C BFu17i_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_F, BFu17i_BFu15s_F)
//============================================================================


struct  BFu17i_BFu15s_I  {
  unsigned int v1:17;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu17i_BFu15s_I) C1{ Fi:17 Fs:15 Fi}



static void Test_BFu17i_BFu15s_I()
{
  {
    init_simple_test("BFu17i_BFu15s_I");
    static STRUCT_IF_C BFu17i_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_I, BFu17i_BFu15s_I)
//============================================================================


struct  BFu17i_BFu15s_Ip  {
  unsigned int v1:17;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu17i_BFu15s_Ip) C1{ Fi:17 Fs:15 Fp}



static void Test_BFu17i_BFu15s_Ip()
{
  {
    init_simple_test("BFu17i_BFu15s_Ip");
    static STRUCT_IF_C BFu17i_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Ip, BFu17i_BFu15s_Ip)
//============================================================================


struct  BFu17i_BFu15s_L  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu15s_L) C1{ Fi:17 Fs:15 FL}



static void Test_BFu17i_BFu15s_L()
{
  {
    init_simple_test("BFu17i_BFu15s_L");
    static STRUCT_IF_C BFu17i_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_L, BFu17i_BFu15s_L)
//============================================================================


struct  BFu17i_BFu15s_S  {
  unsigned int v1:17;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu17i_BFu15s_S) C1{ Fi:17 Fs:15 Fs}



static void Test_BFu17i_BFu15s_S()
{
  {
    init_simple_test("BFu17i_BFu15s_S");
    static STRUCT_IF_C BFu17i_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_S, BFu17i_BFu15s_S)
//============================================================================


struct  BFu17i_BFu15s_Uc  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu15s_Uc) C1{ Fi:17 Fs:15 Fc}



static void Test_BFu17i_BFu15s_Uc()
{
  {
    init_simple_test("BFu17i_BFu15s_Uc");
    static STRUCT_IF_C BFu17i_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Uc, BFu17i_BFu15s_Uc)
//============================================================================


struct  BFu17i_BFu15s_Ui  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu15s_Ui) C1{ Fi:17 Fs:15 Fi}



static void Test_BFu17i_BFu15s_Ui()
{
  {
    init_simple_test("BFu17i_BFu15s_Ui");
    static STRUCT_IF_C BFu17i_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Ui, BFu17i_BFu15s_Ui)
//============================================================================


struct  BFu17i_BFu15s_Ul  {
  unsigned int v1:17;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu15s_Ul) C1{ Fi:17 Fs:15 FL}



static void Test_BFu17i_BFu15s_Ul()
{
  {
    init_simple_test("BFu17i_BFu15s_Ul");
    static STRUCT_IF_C BFu17i_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Ul, BFu17i_BFu15s_Ul)
//============================================================================


struct  BFu17i_BFu15s_Us  {
  unsigned int v1:17;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu15s_Us) C1{ Fi:17 Fs:15 Fs}



static void Test_BFu17i_BFu15s_Us()
{
  {
    init_simple_test("BFu17i_BFu15s_Us");
    static STRUCT_IF_C BFu17i_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Us, BFu17i_BFu15s_Us)
//============================================================================


struct  BFu17i_BFu15s_Vp  {
  unsigned int v1:17;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu17i_BFu15s_Vp) C1{ Fi:17 Fs:15 Fp}



static void Test_BFu17i_BFu15s_Vp()
{
  {
    init_simple_test("BFu17i_BFu15s_Vp");
    static STRUCT_IF_C BFu17i_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu15s_Vp, BFu17i_BFu15s_Vp)
//============================================================================


struct  BFu17i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu17i_BFu16i) C1{ Fi:17 Fi:16}



static void Test_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i, BFu17i_BFu16i)
//============================================================================


struct  BFu17i_BFu16i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu16i_BFu15i) C1{ Fi:17 Fi:16 Fi:15}



static void Test_BFu17i_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu15i, BFu17i_BFu16i_BFu15i)
//============================================================================


struct  BFu17i_BFu16i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu16i_BFu15ll) C1{ Fi:17 Fi:16 FL:15}



static void Test_BFu17i_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu15ll, BFu17i_BFu16i_BFu15ll)
//============================================================================


struct  BFu17i_BFu16i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu16i_BFu15s) C1{ Fi:17 Fi:16 Fs:15}



static void Test_BFu17i_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu15s, BFu17i_BFu16i_BFu15s)
//============================================================================


struct  BFu17i_BFu16i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu16i_BFu16i) C1{ Fi:17 Fi:16 Fi:16}



static void Test_BFu17i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu16i, BFu17i_BFu16i_BFu16i)
//============================================================================


struct  BFu17i_BFu16i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu16i_BFu16ll) C1{ Fi:17 Fi:16 FL:16}



static void Test_BFu17i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu16ll, BFu17i_BFu16i_BFu16ll)
//============================================================================


struct  BFu17i_BFu16i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu16i_BFu16s) C1{ Fi:17 Fi:16 Fs:16}



static void Test_BFu17i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu16s, BFu17i_BFu16i_BFu16s)
//============================================================================


struct  BFu17i_BFu16i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu16i_BFu17i) C1{ Fi:17 Fi:16 Fi:17}



static void Test_BFu17i_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu17i, BFu17i_BFu16i_BFu17i)
//============================================================================


struct  BFu17i_BFu16i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu16i_BFu17ll) C1{ Fi:17 Fi:16 FL:17}



static void Test_BFu17i_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu17ll, BFu17i_BFu16i_BFu17ll)
//============================================================================


struct  BFu17i_BFu16i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu16i_BFu1c) C1{ Fi:17 Fi:16 Fc:1}



static void Test_BFu17i_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu16i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu1c, BFu17i_BFu16i_BFu1c)
//============================================================================


struct  BFu17i_BFu16i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu16i_BFu1i) C1{ Fi:17 Fi:16 Fi:1}



static void Test_BFu17i_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu1i, BFu17i_BFu16i_BFu1i)
//============================================================================


struct  BFu17i_BFu16i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu16i_BFu1ll) C1{ Fi:17 Fi:16 FL:1}



static void Test_BFu17i_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu1ll, BFu17i_BFu16i_BFu1ll)
//============================================================================


struct  BFu17i_BFu16i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu16i_BFu1s) C1{ Fi:17 Fi:16 Fs:1}



static void Test_BFu17i_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu1s, BFu17i_BFu16i_BFu1s)
//============================================================================


struct  BFu17i_BFu16i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu16i_BFu31i) C1{ Fi:17 Fi:16 Fi:31}



static void Test_BFu17i_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu31i, BFu17i_BFu16i_BFu31i)
//============================================================================


struct  BFu17i_BFu16i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu16i_BFu31ll) C1{ Fi:17 Fi:16 FL:31}



static void Test_BFu17i_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17i_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu31ll, BFu17i_BFu16i_BFu31ll)
//============================================================================


struct  BFu17i_BFu16i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu16i_BFu32i) C1{ Fi:17 Fi:16 Fi:32}



static void Test_BFu17i_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu32i, BFu17i_BFu16i_BFu32i)
//============================================================================


struct  BFu17i_BFu16i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu16i_BFu32ll) C1{ Fi:17 Fi:16 FL:32}



static void Test_BFu17i_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17i_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu32ll, BFu17i_BFu16i_BFu32ll)
//============================================================================


struct  BFu17i_BFu16i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu16i_BFu33) C1{ Fi:17 Fi:16 FL:33}



static void Test_BFu17i_BFu16i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu33");
    static STRUCT_IF_C BFu17i_BFu16i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu33, BFu17i_BFu16i_BFu33)
//============================================================================


struct  BFu17i_BFu16i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu16i_BFu7c) C1{ Fi:17 Fi:16 Fc:7}



static void Test_BFu17i_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu7c, BFu17i_BFu16i_BFu7c)
//============================================================================


struct  BFu17i_BFu16i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu16i_BFu7i) C1{ Fi:17 Fi:16 Fi:7}



static void Test_BFu17i_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu7i, BFu17i_BFu16i_BFu7i)
//============================================================================


struct  BFu17i_BFu16i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu16i_BFu7ll) C1{ Fi:17 Fi:16 FL:7}



static void Test_BFu17i_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu7ll, BFu17i_BFu16i_BFu7ll)
//============================================================================


struct  BFu17i_BFu16i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu16i_BFu7s) C1{ Fi:17 Fi:16 Fs:7}



static void Test_BFu17i_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu7s, BFu17i_BFu16i_BFu7s)
//============================================================================


struct  BFu17i_BFu16i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu16i_BFu8c) C1{ Fi:17 Fi:16 Fc:8}



static void Test_BFu17i_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu8c, BFu17i_BFu16i_BFu8c)
//============================================================================


struct  BFu17i_BFu16i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu16i_BFu8i) C1{ Fi:17 Fi:16 Fi:8}



static void Test_BFu17i_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu8i, BFu17i_BFu16i_BFu8i)
//============================================================================


struct  BFu17i_BFu16i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu16i_BFu8ll) C1{ Fi:17 Fi:16 FL:8}



static void Test_BFu17i_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu8ll, BFu17i_BFu16i_BFu8ll)
//============================================================================


struct  BFu17i_BFu16i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu16i_BFu8s) C1{ Fi:17 Fi:16 Fs:8}



static void Test_BFu17i_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu8s, BFu17i_BFu16i_BFu8s)
//============================================================================


struct  BFu17i_BFu16i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu16i_BFu9i) C1{ Fi:17 Fi:16 Fi:9}



static void Test_BFu17i_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu9i, BFu17i_BFu16i_BFu9i)
//============================================================================


struct  BFu17i_BFu16i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu16i_BFu9ll) C1{ Fi:17 Fi:16 FL:9}



static void Test_BFu17i_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu9ll, BFu17i_BFu16i_BFu9ll)
//============================================================================


struct  BFu17i_BFu16i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu16i_BFu9s) C1{ Fi:17 Fi:16 Fs:9}



static void Test_BFu17i_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu16i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_BFu9s, BFu17i_BFu16i_BFu9s)
//============================================================================


struct  BFu17i_BFu16i_C  {
  unsigned int v1:17;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu17i_BFu16i_C) C1{ Fi:17 Fi:16 Fc}



static void Test_BFu17i_BFu16i_C()
{
  {
    init_simple_test("BFu17i_BFu16i_C");
    static STRUCT_IF_C BFu17i_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_C");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_C, BFu17i_BFu16i_C)
//============================================================================


struct  BFu17i_BFu16i_D  {
  unsigned int v1:17;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu17i_BFu16i_D) C1{ Fi:17 Fi:16 FL}



static void Test_BFu17i_BFu16i_D()
{
  {
    init_simple_test("BFu17i_BFu16i_D");
    static STRUCT_IF_C BFu17i_BFu16i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_D, BFu17i_BFu16i_D)
//============================================================================


struct  BFu17i_BFu16i_F  {
  unsigned int v1:17;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu17i_BFu16i_F) C1{ Fi:17 Fi:16 Fi}



static void Test_BFu17i_BFu16i_F()
{
  {
    init_simple_test("BFu17i_BFu16i_F");
    static STRUCT_IF_C BFu17i_BFu16i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_F, BFu17i_BFu16i_F)
//============================================================================


struct  BFu17i_BFu16i_I  {
  unsigned int v1:17;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu17i_BFu16i_I) C1{ Fi:17 Fi:16 Fi}



static void Test_BFu17i_BFu16i_I()
{
  {
    init_simple_test("BFu17i_BFu16i_I");
    static STRUCT_IF_C BFu17i_BFu16i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_I, BFu17i_BFu16i_I)
//============================================================================


struct  BFu17i_BFu16i_Ip  {
  unsigned int v1:17;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu17i_BFu16i_Ip) C1{ Fi:17 Fi:16 Fp}



static void Test_BFu17i_BFu16i_Ip()
{
  {
    init_simple_test("BFu17i_BFu16i_Ip");
    static STRUCT_IF_C BFu17i_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Ip, BFu17i_BFu16i_Ip)
//============================================================================


struct  BFu17i_BFu16i_L  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu16i_L) C1{ Fi:17 Fi:16 FL}



static void Test_BFu17i_BFu16i_L()
{
  {
    init_simple_test("BFu17i_BFu16i_L");
    static STRUCT_IF_C BFu17i_BFu16i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_L, BFu17i_BFu16i_L)
//============================================================================


struct  BFu17i_BFu16i_S  {
  unsigned int v1:17;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu17i_BFu16i_S) C1{ Fi:17 Fi:16 Fs}



static void Test_BFu17i_BFu16i_S()
{
  {
    init_simple_test("BFu17i_BFu16i_S");
    static STRUCT_IF_C BFu17i_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_S");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_S, BFu17i_BFu16i_S)
//============================================================================


struct  BFu17i_BFu16i_Uc  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu16i_Uc) C1{ Fi:17 Fi:16 Fc}



static void Test_BFu17i_BFu16i_Uc()
{
  {
    init_simple_test("BFu17i_BFu16i_Uc");
    static STRUCT_IF_C BFu17i_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Uc");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Uc, BFu17i_BFu16i_Uc)
//============================================================================


struct  BFu17i_BFu16i_Ui  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu16i_Ui) C1{ Fi:17 Fi:16 Fi}



static void Test_BFu17i_BFu16i_Ui()
{
  {
    init_simple_test("BFu17i_BFu16i_Ui");
    static STRUCT_IF_C BFu17i_BFu16i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Ui, BFu17i_BFu16i_Ui)
//============================================================================


struct  BFu17i_BFu16i_Ul  {
  unsigned int v1:17;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu16i_Ul) C1{ Fi:17 Fi:16 FL}



static void Test_BFu17i_BFu16i_Ul()
{
  {
    init_simple_test("BFu17i_BFu16i_Ul");
    static STRUCT_IF_C BFu17i_BFu16i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Ul, BFu17i_BFu16i_Ul)
//============================================================================


struct  BFu17i_BFu16i_Us  {
  unsigned int v1:17;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu16i_Us) C1{ Fi:17 Fi:16 Fs}



static void Test_BFu17i_BFu16i_Us()
{
  {
    init_simple_test("BFu17i_BFu16i_Us");
    static STRUCT_IF_C BFu17i_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Us");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Us, BFu17i_BFu16i_Us)
//============================================================================


struct  BFu17i_BFu16i_Vp  {
  unsigned int v1:17;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu17i_BFu16i_Vp) C1{ Fi:17 Fi:16 Fp}



static void Test_BFu17i_BFu16i_Vp()
{
  {
    init_simple_test("BFu17i_BFu16i_Vp");
    static STRUCT_IF_C BFu17i_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16i_Vp, BFu17i_BFu16i_Vp)
//============================================================================


struct  BFu17i_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu17i_BFu16ll) C1{ Fi:17 FL:16}



static void Test_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll, BFu17i_BFu16ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu16ll_BFu15i) C1{ Fi:17 FL:16 Fi:15}



static void Test_BFu17i_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu15i, BFu17i_BFu16ll_BFu15i)
//============================================================================


struct  BFu17i_BFu16ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu16ll_BFu15ll) C1{ Fi:17 FL:16 FL:15}



static void Test_BFu17i_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu15ll, BFu17i_BFu16ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu16ll_BFu15s) C1{ Fi:17 FL:16 Fs:15}



static void Test_BFu17i_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu15s, BFu17i_BFu16ll_BFu15s)
//============================================================================


struct  BFu17i_BFu16ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu16ll_BFu16i) C1{ Fi:17 FL:16 Fi:16}



static void Test_BFu17i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu17i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu16i, BFu17i_BFu16ll_BFu16i)
//============================================================================


struct  BFu17i_BFu16ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu16ll_BFu16ll) C1{ Fi:17 FL:16 FL:16}



static void Test_BFu17i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu17i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu16ll, BFu17i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu16ll_BFu16s) C1{ Fi:17 FL:16 Fs:16}



static void Test_BFu17i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu16s, BFu17i_BFu16ll_BFu16s)
//============================================================================


struct  BFu17i_BFu16ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu16ll_BFu17i) C1{ Fi:17 FL:16 Fi:17}



static void Test_BFu17i_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu17i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu17i, BFu17i_BFu16ll_BFu17i)
//============================================================================


struct  BFu17i_BFu16ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu16ll_BFu17ll) C1{ Fi:17 FL:16 FL:17}



static void Test_BFu17i_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu17i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu17ll, BFu17i_BFu16ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu16ll_BFu1c) C1{ Fi:17 FL:16 Fc:1}



static void Test_BFu17i_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17i_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu1c, BFu17i_BFu16ll_BFu1c)
//============================================================================


struct  BFu17i_BFu16ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu16ll_BFu1i) C1{ Fi:17 FL:16 Fi:1}



static void Test_BFu17i_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17i_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu1i, BFu17i_BFu16ll_BFu1i)
//============================================================================


struct  BFu17i_BFu16ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu16ll_BFu1ll) C1{ Fi:17 FL:16 FL:1}



static void Test_BFu17i_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17i_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu1ll, BFu17i_BFu16ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu16ll_BFu1s) C1{ Fi:17 FL:16 Fs:1}



static void Test_BFu17i_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17i_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu1s, BFu17i_BFu16ll_BFu1s)
//============================================================================


struct  BFu17i_BFu16ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu16ll_BFu31i) C1{ Fi:17 FL:16 Fi:31}



static void Test_BFu17i_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu17i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu31i, BFu17i_BFu16ll_BFu31i)
//============================================================================


struct  BFu17i_BFu16ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu16ll_BFu31ll) C1{ Fi:17 FL:16 FL:31}



static void Test_BFu17i_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu17i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu31ll, BFu17i_BFu16ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu16ll_BFu32i) C1{ Fi:17 FL:16 Fi:32}



static void Test_BFu17i_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu32i, BFu17i_BFu16ll_BFu32i)
//============================================================================


struct  BFu17i_BFu16ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu16ll_BFu32ll) C1{ Fi:17 FL:16 FL:32}



static void Test_BFu17i_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu17i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17i_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu32ll, BFu17i_BFu16ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu16ll_BFu33) C1{ Fi:17 FL:16 FL:33}



static void Test_BFu17i_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu17i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17i_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu33, BFu17i_BFu16ll_BFu33)
//============================================================================


struct  BFu17i_BFu16ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu16ll_BFu7c) C1{ Fi:17 FL:16 Fc:7}



static void Test_BFu17i_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu7c, BFu17i_BFu16ll_BFu7c)
//============================================================================


struct  BFu17i_BFu16ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu16ll_BFu7i) C1{ Fi:17 FL:16 Fi:7}



static void Test_BFu17i_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu7i, BFu17i_BFu16ll_BFu7i)
//============================================================================


struct  BFu17i_BFu16ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu16ll_BFu7ll) C1{ Fi:17 FL:16 FL:7}



static void Test_BFu17i_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu7ll, BFu17i_BFu16ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu16ll_BFu7s) C1{ Fi:17 FL:16 Fs:7}



static void Test_BFu17i_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu7s, BFu17i_BFu16ll_BFu7s)
//============================================================================


struct  BFu17i_BFu16ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu16ll_BFu8c) C1{ Fi:17 FL:16 Fc:8}



static void Test_BFu17i_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu17i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu8c, BFu17i_BFu16ll_BFu8c)
//============================================================================


struct  BFu17i_BFu16ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu16ll_BFu8i) C1{ Fi:17 FL:16 Fi:8}



static void Test_BFu17i_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu8i, BFu17i_BFu16ll_BFu8i)
//============================================================================


struct  BFu17i_BFu16ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu16ll_BFu8ll) C1{ Fi:17 FL:16 FL:8}



static void Test_BFu17i_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu8ll, BFu17i_BFu16ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu16ll_BFu8s) C1{ Fi:17 FL:16 Fs:8}



static void Test_BFu17i_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu8s, BFu17i_BFu16ll_BFu8s)
//============================================================================


struct  BFu17i_BFu16ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu16ll_BFu9i) C1{ Fi:17 FL:16 Fi:9}



static void Test_BFu17i_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu9i, BFu17i_BFu16ll_BFu9i)
//============================================================================


struct  BFu17i_BFu16ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu16ll_BFu9ll) C1{ Fi:17 FL:16 FL:9}



static void Test_BFu17i_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu9ll, BFu17i_BFu16ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu16ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu16ll_BFu9s) C1{ Fi:17 FL:16 Fs:9}



static void Test_BFu17i_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_BFu9s, BFu17i_BFu16ll_BFu9s)
//============================================================================


struct  BFu17i_BFu16ll_C  {
  unsigned int v1:17;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu17i_BFu16ll_C) C1{ Fi:17 FL:16 Fc}



static void Test_BFu17i_BFu16ll_C()
{
  {
    init_simple_test("BFu17i_BFu16ll_C");
    static STRUCT_IF_C BFu17i_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_C");
    check_field_offset(lv, v3, 5, "BFu17i_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_C, BFu17i_BFu16ll_C)
//============================================================================


struct  BFu17i_BFu16ll_D  {
  unsigned int v1:17;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu17i_BFu16ll_D) C1{ Fi:17 FL:16 FL}



static void Test_BFu17i_BFu16ll_D()
{
  {
    init_simple_test("BFu17i_BFu16ll_D");
    static STRUCT_IF_C BFu17i_BFu16ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_D, BFu17i_BFu16ll_D)
//============================================================================


struct  BFu17i_BFu16ll_F  {
  unsigned int v1:17;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu17i_BFu16ll_F) C1{ Fi:17 FL:16 Fi}



static void Test_BFu17i_BFu16ll_F()
{
  {
    init_simple_test("BFu17i_BFu16ll_F");
    static STRUCT_IF_C BFu17i_BFu16ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_F, BFu17i_BFu16ll_F)
//============================================================================


struct  BFu17i_BFu16ll_I  {
  unsigned int v1:17;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu17i_BFu16ll_I) C1{ Fi:17 FL:16 Fi}



static void Test_BFu17i_BFu16ll_I()
{
  {
    init_simple_test("BFu17i_BFu16ll_I");
    static STRUCT_IF_C BFu17i_BFu16ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_I, BFu17i_BFu16ll_I)
//============================================================================


struct  BFu17i_BFu16ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu17i_BFu16ll_Ip) C1{ Fi:17 FL:16 Fp}



static void Test_BFu17i_BFu16ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu16ll_Ip");
    static STRUCT_IF_C BFu17i_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Ip, BFu17i_BFu16ll_Ip)
//============================================================================


struct  BFu17i_BFu16ll_L  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu16ll_L) C1{ Fi:17 FL:16 FL}



static void Test_BFu17i_BFu16ll_L()
{
  {
    init_simple_test("BFu17i_BFu16ll_L");
    static STRUCT_IF_C BFu17i_BFu16ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_L, BFu17i_BFu16ll_L)
//============================================================================


struct  BFu17i_BFu16ll_S  {
  unsigned int v1:17;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu17i_BFu16ll_S) C1{ Fi:17 FL:16 Fs}



static void Test_BFu17i_BFu16ll_S()
{
  {
    init_simple_test("BFu17i_BFu16ll_S");
    static STRUCT_IF_C BFu17i_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_S");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_S, BFu17i_BFu16ll_S)
//============================================================================


struct  BFu17i_BFu16ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu16ll_Uc) C1{ Fi:17 FL:16 Fc}



static void Test_BFu17i_BFu16ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu16ll_Uc");
    static STRUCT_IF_C BFu17i_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Uc");
    check_field_offset(lv, v3, 5, "BFu17i_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Uc, BFu17i_BFu16ll_Uc)
//============================================================================


struct  BFu17i_BFu16ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu16ll_Ui) C1{ Fi:17 FL:16 Fi}



static void Test_BFu17i_BFu16ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu16ll_Ui");
    static STRUCT_IF_C BFu17i_BFu16ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Ui, BFu17i_BFu16ll_Ui)
//============================================================================


struct  BFu17i_BFu16ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu16ll_Ul) C1{ Fi:17 FL:16 FL}



static void Test_BFu17i_BFu16ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu16ll_Ul");
    static STRUCT_IF_C BFu17i_BFu16ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Ul, BFu17i_BFu16ll_Ul)
//============================================================================


struct  BFu17i_BFu16ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu16ll_Us) C1{ Fi:17 FL:16 Fs}



static void Test_BFu17i_BFu16ll_Us()
{
  {
    init_simple_test("BFu17i_BFu16ll_Us");
    static STRUCT_IF_C BFu17i_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Us");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Us, BFu17i_BFu16ll_Us)
//============================================================================


struct  BFu17i_BFu16ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu17i_BFu16ll_Vp) C1{ Fi:17 FL:16 Fp}



static void Test_BFu17i_BFu16ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu16ll_Vp");
    static STRUCT_IF_C BFu17i_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16ll_Vp, BFu17i_BFu16ll_Vp)
//============================================================================


struct  BFu17i_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu17i_BFu16s) C1{ Fi:17 Fs:16}



static void Test_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s, BFu17i_BFu16s)
//============================================================================


struct  BFu17i_BFu16s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu16s_BFu15i) C1{ Fi:17 Fs:16 Fi:15}



static void Test_BFu17i_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu15i, BFu17i_BFu16s_BFu15i)
//============================================================================


struct  BFu17i_BFu16s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu16s_BFu15ll) C1{ Fi:17 Fs:16 FL:15}



static void Test_BFu17i_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu15ll, BFu17i_BFu16s_BFu15ll)
//============================================================================


struct  BFu17i_BFu16s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu16s_BFu15s) C1{ Fi:17 Fs:16 Fs:15}



static void Test_BFu17i_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu15s, BFu17i_BFu16s_BFu15s)
//============================================================================


struct  BFu17i_BFu16s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu16s_BFu16i) C1{ Fi:17 Fs:16 Fi:16}



static void Test_BFu17i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu16i, BFu17i_BFu16s_BFu16i)
//============================================================================


struct  BFu17i_BFu16s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu16s_BFu16ll) C1{ Fi:17 Fs:16 FL:16}



static void Test_BFu17i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu16ll, BFu17i_BFu16s_BFu16ll)
//============================================================================


struct  BFu17i_BFu16s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu16s_BFu16s) C1{ Fi:17 Fs:16 Fs:16}



static void Test_BFu17i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu16s, BFu17i_BFu16s_BFu16s)
//============================================================================


struct  BFu17i_BFu16s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu16s_BFu17i) C1{ Fi:17 Fs:16 Fi:17}



static void Test_BFu17i_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu17i, BFu17i_BFu16s_BFu17i)
//============================================================================


struct  BFu17i_BFu16s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu16s_BFu17ll) C1{ Fi:17 Fs:16 FL:17}



static void Test_BFu17i_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu17ll, BFu17i_BFu16s_BFu17ll)
//============================================================================


struct  BFu17i_BFu16s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu16s_BFu1c) C1{ Fi:17 Fs:16 Fc:1}



static void Test_BFu17i_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu1c, BFu17i_BFu16s_BFu1c)
//============================================================================


struct  BFu17i_BFu16s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu16s_BFu1i) C1{ Fi:17 Fs:16 Fi:1}



static void Test_BFu17i_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu1i, BFu17i_BFu16s_BFu1i)
//============================================================================


struct  BFu17i_BFu16s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu16s_BFu1ll) C1{ Fi:17 Fs:16 FL:1}



static void Test_BFu17i_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu1ll, BFu17i_BFu16s_BFu1ll)
//============================================================================


struct  BFu17i_BFu16s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu16s_BFu1s) C1{ Fi:17 Fs:16 Fs:1}



static void Test_BFu17i_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu1s, BFu17i_BFu16s_BFu1s)
//============================================================================


struct  BFu17i_BFu16s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu16s_BFu31i) C1{ Fi:17 Fs:16 Fi:31}



static void Test_BFu17i_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu31i, BFu17i_BFu16s_BFu31i)
//============================================================================


struct  BFu17i_BFu16s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu16s_BFu31ll) C1{ Fi:17 Fs:16 FL:31}



static void Test_BFu17i_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17i_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu31ll, BFu17i_BFu16s_BFu31ll)
//============================================================================


struct  BFu17i_BFu16s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu16s_BFu32i) C1{ Fi:17 Fs:16 Fi:32}



static void Test_BFu17i_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu32i, BFu17i_BFu16s_BFu32i)
//============================================================================


struct  BFu17i_BFu16s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu16s_BFu32ll) C1{ Fi:17 Fs:16 FL:32}



static void Test_BFu17i_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17i_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu32ll, BFu17i_BFu16s_BFu32ll)
//============================================================================


struct  BFu17i_BFu16s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu16s_BFu33) C1{ Fi:17 Fs:16 FL:33}



static void Test_BFu17i_BFu16s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu33");
    static STRUCT_IF_C BFu17i_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu33, BFu17i_BFu16s_BFu33)
//============================================================================


struct  BFu17i_BFu16s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu16s_BFu7c) C1{ Fi:17 Fs:16 Fc:7}



static void Test_BFu17i_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu7c, BFu17i_BFu16s_BFu7c)
//============================================================================


struct  BFu17i_BFu16s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu16s_BFu7i) C1{ Fi:17 Fs:16 Fi:7}



static void Test_BFu17i_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu7i, BFu17i_BFu16s_BFu7i)
//============================================================================


struct  BFu17i_BFu16s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu16s_BFu7ll) C1{ Fi:17 Fs:16 FL:7}



static void Test_BFu17i_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu7ll, BFu17i_BFu16s_BFu7ll)
//============================================================================


struct  BFu17i_BFu16s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu16s_BFu7s) C1{ Fi:17 Fs:16 Fs:7}



static void Test_BFu17i_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu7s, BFu17i_BFu16s_BFu7s)
//============================================================================


struct  BFu17i_BFu16s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu16s_BFu8c) C1{ Fi:17 Fs:16 Fc:8}



static void Test_BFu17i_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu8c, BFu17i_BFu16s_BFu8c)
//============================================================================


struct  BFu17i_BFu16s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu16s_BFu8i) C1{ Fi:17 Fs:16 Fi:8}



static void Test_BFu17i_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu8i, BFu17i_BFu16s_BFu8i)
//============================================================================


struct  BFu17i_BFu16s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu16s_BFu8ll) C1{ Fi:17 Fs:16 FL:8}



static void Test_BFu17i_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu8ll, BFu17i_BFu16s_BFu8ll)
//============================================================================


struct  BFu17i_BFu16s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu16s_BFu8s) C1{ Fi:17 Fs:16 Fs:8}



static void Test_BFu17i_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu8s, BFu17i_BFu16s_BFu8s)
//============================================================================


struct  BFu17i_BFu16s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu16s_BFu9i) C1{ Fi:17 Fs:16 Fi:9}



static void Test_BFu17i_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu9i, BFu17i_BFu16s_BFu9i)
//============================================================================


struct  BFu17i_BFu16s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu16s_BFu9ll) C1{ Fi:17 Fs:16 FL:9}



static void Test_BFu17i_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu9ll, BFu17i_BFu16s_BFu9ll)
//============================================================================


struct  BFu17i_BFu16s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu16s_BFu9s) C1{ Fi:17 Fs:16 Fs:9}



static void Test_BFu17i_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu16s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_BFu9s, BFu17i_BFu16s_BFu9s)
//============================================================================


struct  BFu17i_BFu16s_C  {
  unsigned int v1:17;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu17i_BFu16s_C) C1{ Fi:17 Fs:16 Fc}



static void Test_BFu17i_BFu16s_C()
{
  {
    init_simple_test("BFu17i_BFu16s_C");
    static STRUCT_IF_C BFu17i_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_C");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_C, BFu17i_BFu16s_C)
//============================================================================


struct  BFu17i_BFu16s_D  {
  unsigned int v1:17;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu17i_BFu16s_D) C1{ Fi:17 Fs:16 FL}



static void Test_BFu17i_BFu16s_D()
{
  {
    init_simple_test("BFu17i_BFu16s_D");
    static STRUCT_IF_C BFu17i_BFu16s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_D, BFu17i_BFu16s_D)
//============================================================================


struct  BFu17i_BFu16s_F  {
  unsigned int v1:17;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu17i_BFu16s_F) C1{ Fi:17 Fs:16 Fi}



static void Test_BFu17i_BFu16s_F()
{
  {
    init_simple_test("BFu17i_BFu16s_F");
    static STRUCT_IF_C BFu17i_BFu16s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_F, BFu17i_BFu16s_F)
//============================================================================


struct  BFu17i_BFu16s_I  {
  unsigned int v1:17;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu17i_BFu16s_I) C1{ Fi:17 Fs:16 Fi}



static void Test_BFu17i_BFu16s_I()
{
  {
    init_simple_test("BFu17i_BFu16s_I");
    static STRUCT_IF_C BFu17i_BFu16s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_I, BFu17i_BFu16s_I)
//============================================================================


struct  BFu17i_BFu16s_Ip  {
  unsigned int v1:17;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu17i_BFu16s_Ip) C1{ Fi:17 Fs:16 Fp}



static void Test_BFu17i_BFu16s_Ip()
{
  {
    init_simple_test("BFu17i_BFu16s_Ip");
    static STRUCT_IF_C BFu17i_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Ip, BFu17i_BFu16s_Ip)
//============================================================================


struct  BFu17i_BFu16s_L  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu16s_L) C1{ Fi:17 Fs:16 FL}



static void Test_BFu17i_BFu16s_L()
{
  {
    init_simple_test("BFu17i_BFu16s_L");
    static STRUCT_IF_C BFu17i_BFu16s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_L, BFu17i_BFu16s_L)
//============================================================================


struct  BFu17i_BFu16s_S  {
  unsigned int v1:17;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu17i_BFu16s_S) C1{ Fi:17 Fs:16 Fs}



static void Test_BFu17i_BFu16s_S()
{
  {
    init_simple_test("BFu17i_BFu16s_S");
    static STRUCT_IF_C BFu17i_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_S");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_S, BFu17i_BFu16s_S)
//============================================================================


struct  BFu17i_BFu16s_Uc  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu16s_Uc) C1{ Fi:17 Fs:16 Fc}



static void Test_BFu17i_BFu16s_Uc()
{
  {
    init_simple_test("BFu17i_BFu16s_Uc");
    static STRUCT_IF_C BFu17i_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Uc");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Uc, BFu17i_BFu16s_Uc)
//============================================================================


struct  BFu17i_BFu16s_Ui  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu16s_Ui) C1{ Fi:17 Fs:16 Fi}



static void Test_BFu17i_BFu16s_Ui()
{
  {
    init_simple_test("BFu17i_BFu16s_Ui");
    static STRUCT_IF_C BFu17i_BFu16s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Ui, BFu17i_BFu16s_Ui)
//============================================================================


struct  BFu17i_BFu16s_Ul  {
  unsigned int v1:17;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu16s_Ul) C1{ Fi:17 Fs:16 FL}



static void Test_BFu17i_BFu16s_Ul()
{
  {
    init_simple_test("BFu17i_BFu16s_Ul");
    static STRUCT_IF_C BFu17i_BFu16s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Ul, BFu17i_BFu16s_Ul)
//============================================================================


struct  BFu17i_BFu16s_Us  {
  unsigned int v1:17;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu16s_Us) C1{ Fi:17 Fs:16 Fs}



static void Test_BFu17i_BFu16s_Us()
{
  {
    init_simple_test("BFu17i_BFu16s_Us");
    static STRUCT_IF_C BFu17i_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Us");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Us, BFu17i_BFu16s_Us)
//============================================================================


struct  BFu17i_BFu16s_Vp  {
  unsigned int v1:17;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu17i_BFu16s_Vp) C1{ Fi:17 Fs:16 Fp}



static void Test_BFu17i_BFu16s_Vp()
{
  {
    init_simple_test("BFu17i_BFu16s_Vp");
    static STRUCT_IF_C BFu17i_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu16s_Vp, BFu17i_BFu16s_Vp)
//============================================================================


struct  BFu17i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu17i_BFu17i) C1{ Fi:17 Fi:17}



static void Test_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i, BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed int v3:17;
};
//SIG(1 BFu17i_BFu17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17i, BFu17i_BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17i_BFs17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFs17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17i_BFs17i, BFu17i_BFu17i_BFs17i_BFs17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17i_BFs17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17i_BFs17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17i_BFs17ll, BFu17i_BFu17i_BFs17i_BFs17ll)
//============================================================================


struct  BFu17i_BFu17i_BFs17i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFs17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17i_BFu17i, BFu17i_BFu17i_BFs17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17i_BFu17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17i_BFu17ll, BFu17i_BFu17i_BFs17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17i_BFs17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17i_BFu17i_BFs17ll) C1{ Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17ll, BFu17i_BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFu17i_BFs17ll_BFs17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17ll_BFs17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17i_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17ll_BFs17i, BFu17i_BFu17i_BFs17ll_BFs17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17ll_BFs17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17ll_BFs17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17i_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17ll_BFs17ll, BFu17i_BFu17i_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFu17i_BFs17ll_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17ll_BFu17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17i_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17ll_BFu17i, BFu17i_BFu17i_BFs17ll_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFs17ll_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFs17ll_BFu17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17i_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFs17ll_BFu17ll, BFu17i_BFu17i_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu17i_BFu15i) C1{ Fi:17 Fi:17 Fi:15}



static void Test_BFu17i_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu15i, BFu17i_BFu17i_BFu15i)
//============================================================================


struct  BFu17i_BFu17i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu17i_BFu15ll) C1{ Fi:17 Fi:17 FL:15}



static void Test_BFu17i_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu15ll, BFu17i_BFu17i_BFu15ll)
//============================================================================


struct  BFu17i_BFu17i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu17i_BFu15s) C1{ Fi:17 Fi:17 Fs:15}



static void Test_BFu17i_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu15s, BFu17i_BFu17i_BFu15s)
//============================================================================


struct  BFu17i_BFu17i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu17i_BFu16i) C1{ Fi:17 Fi:17 Fi:16}



static void Test_BFu17i_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu16i, BFu17i_BFu17i_BFu16i)
//============================================================================


struct  BFu17i_BFu17i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu17i_BFu16ll) C1{ Fi:17 Fi:17 FL:16}



static void Test_BFu17i_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu17i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu17i_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu16ll, BFu17i_BFu17i_BFu16ll)
//============================================================================


struct  BFu17i_BFu17i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu17i_BFu16s) C1{ Fi:17 Fi:17 Fs:16}



static void Test_BFu17i_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu16s, BFu17i_BFu17i_BFu16s)
//============================================================================


struct  BFu17i_BFu17i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17i, BFu17i_BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFu17i_BFs17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17i_BFs17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFu17i_BFs17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17i_BFs17i, BFu17i_BFu17i_BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFu17i_BFu17i_BFs17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17i_BFs17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17i_BFs17ll, BFu17i_BFu17i_BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu17i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17i_BFu17i) C1{ Fi:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17i_BFu17i, BFu17i_BFu17i_BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFu17i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17i_BFu17ll) C1{ Fi:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17i_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17i_BFu17ll, BFu17i_BFu17i_BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu17i_BFu17ll) C1{ Fi:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17ll, BFu17i_BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu17ll_BFs17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17ll_BFs17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17i_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17ll_BFs17i, BFu17i_BFu17i_BFu17ll_BFs17i)
//============================================================================


struct  BFu17i_BFu17i_BFu17ll_BFs17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17ll_BFs17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17i_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17ll_BFs17ll, BFu17i_BFu17i_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu17ll_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17ll_BFu17i) C1{ Fi:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17ll_BFu17i, BFu17i_BFu17i_BFu17ll_BFu17i)
//============================================================================


struct  BFu17i_BFu17i_BFu17ll_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17i_BFu17ll_BFu17ll) C1{ Fi:17 Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17i_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu17ll_BFu17ll, BFu17i_BFu17i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu17i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu17i_BFu1c) C1{ Fi:17 Fi:17 Fc:1}



static void Test_BFu17i_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu1c, BFu17i_BFu17i_BFu1c)
//============================================================================


struct  BFu17i_BFu17i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu17i_BFu1i) C1{ Fi:17 Fi:17 Fi:1}



static void Test_BFu17i_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu1i, BFu17i_BFu17i_BFu1i)
//============================================================================


struct  BFu17i_BFu17i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu17i_BFu1ll) C1{ Fi:17 Fi:17 FL:1}



static void Test_BFu17i_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu1ll, BFu17i_BFu17i_BFu1ll)
//============================================================================


struct  BFu17i_BFu17i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu17i_BFu1s) C1{ Fi:17 Fi:17 Fs:1}



static void Test_BFu17i_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu1s, BFu17i_BFu17i_BFu1s)
//============================================================================


struct  BFu17i_BFu17i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu17i_BFu31i) C1{ Fi:17 Fi:17 Fi:31}



static void Test_BFu17i_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu31i, BFu17i_BFu17i_BFu31i)
//============================================================================


struct  BFu17i_BFu17i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu17i_BFu31ll) C1{ Fi:17 Fi:17 FL:31}



static void Test_BFu17i_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu17i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu17i_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu31ll, BFu17i_BFu17i_BFu31ll)
//============================================================================


struct  BFu17i_BFu17i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu17i_BFu32i) C1{ Fi:17 Fi:17 Fi:32}



static void Test_BFu17i_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu32i, BFu17i_BFu17i_BFu32i)
//============================================================================


struct  BFu17i_BFu17i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu17i_BFu32ll) C1{ Fi:17 Fi:17 FL:32}



static void Test_BFu17i_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu17i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17i_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu32ll, BFu17i_BFu17i_BFu32ll)
//============================================================================


struct  BFu17i_BFu17i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu17i_BFu33) C1{ Fi:17 Fi:17 FL:33}



static void Test_BFu17i_BFu17i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu33");
    static STRUCT_IF_C BFu17i_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu17i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17i_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu33, BFu17i_BFu17i_BFu33)
//============================================================================


struct  BFu17i_BFu17i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu17i_BFu7c) C1{ Fi:17 Fi:17 Fc:7}



static void Test_BFu17i_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu7c, BFu17i_BFu17i_BFu7c)
//============================================================================


struct  BFu17i_BFu17i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu17i_BFu7i) C1{ Fi:17 Fi:17 Fi:7}



static void Test_BFu17i_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu7i, BFu17i_BFu17i_BFu7i)
//============================================================================


struct  BFu17i_BFu17i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu17i_BFu7ll) C1{ Fi:17 Fi:17 FL:7}



static void Test_BFu17i_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu7ll, BFu17i_BFu17i_BFu7ll)
//============================================================================


struct  BFu17i_BFu17i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu17i_BFu7s) C1{ Fi:17 Fi:17 Fs:7}



static void Test_BFu17i_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu7s, BFu17i_BFu17i_BFu7s)
//============================================================================


struct  BFu17i_BFu17i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu17i_BFu8c) C1{ Fi:17 Fi:17 Fc:8}



static void Test_BFu17i_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu8c, BFu17i_BFu17i_BFu8c)
//============================================================================


struct  BFu17i_BFu17i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu17i_BFu8i) C1{ Fi:17 Fi:17 Fi:8}



static void Test_BFu17i_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu8i, BFu17i_BFu17i_BFu8i)
//============================================================================


struct  BFu17i_BFu17i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu17i_BFu8ll) C1{ Fi:17 Fi:17 FL:8}



static void Test_BFu17i_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu8ll, BFu17i_BFu17i_BFu8ll)
//============================================================================


struct  BFu17i_BFu17i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu17i_BFu8s) C1{ Fi:17 Fi:17 Fs:8}



static void Test_BFu17i_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu8s, BFu17i_BFu17i_BFu8s)
//============================================================================


struct  BFu17i_BFu17i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu17i_BFu9i) C1{ Fi:17 Fi:17 Fi:9}



static void Test_BFu17i_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu9i, BFu17i_BFu17i_BFu9i)
//============================================================================


struct  BFu17i_BFu17i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu17i_BFu9ll) C1{ Fi:17 Fi:17 FL:9}



static void Test_BFu17i_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu9ll, BFu17i_BFu17i_BFu9ll)
//============================================================================


struct  BFu17i_BFu17i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu17i_BFu9s) C1{ Fi:17 Fi:17 Fs:9}



static void Test_BFu17i_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu17i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_BFu9s, BFu17i_BFu17i_BFu9s)
//============================================================================


struct  BFu17i_BFu17i_C  {
  unsigned int v1:17;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu17i_BFu17i_C) C1{ Fi:17 Fi:17 Fc}



static void Test_BFu17i_BFu17i_C()
{
  {
    init_simple_test("BFu17i_BFu17i_C");
    static STRUCT_IF_C BFu17i_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_C");
    check_field_offset(lv, v3, 7, "BFu17i_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_C, BFu17i_BFu17i_C)
//============================================================================


struct  BFu17i_BFu17i_D  {
  unsigned int v1:17;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu17i_BFu17i_D) C1{ Fi:17 Fi:17 FL}



static void Test_BFu17i_BFu17i_D()
{
  {
    init_simple_test("BFu17i_BFu17i_D");
    static STRUCT_IF_C BFu17i_BFu17i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_D, BFu17i_BFu17i_D)
//============================================================================


struct  BFu17i_BFu17i_F  {
  unsigned int v1:17;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu17i_BFu17i_F) C1{ Fi:17 Fi:17 Fi}



static void Test_BFu17i_BFu17i_F()
{
  {
    init_simple_test("BFu17i_BFu17i_F");
    static STRUCT_IF_C BFu17i_BFu17i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_F, BFu17i_BFu17i_F)
//============================================================================


struct  BFu17i_BFu17i_I  {
  unsigned int v1:17;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu17i_BFu17i_I) C1{ Fi:17 Fi:17 Fi}



static void Test_BFu17i_BFu17i_I()
{
  {
    init_simple_test("BFu17i_BFu17i_I");
    static STRUCT_IF_C BFu17i_BFu17i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_I, BFu17i_BFu17i_I)
//============================================================================


struct  BFu17i_BFu17i_Ip  {
  unsigned int v1:17;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu17i_BFu17i_Ip) C1{ Fi:17 Fi:17 Fp}



static void Test_BFu17i_BFu17i_Ip()
{
  {
    init_simple_test("BFu17i_BFu17i_Ip");
    static STRUCT_IF_C BFu17i_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Ip, BFu17i_BFu17i_Ip)
//============================================================================


struct  BFu17i_BFu17i_L  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu17i_L) C1{ Fi:17 Fi:17 FL}



static void Test_BFu17i_BFu17i_L()
{
  {
    init_simple_test("BFu17i_BFu17i_L");
    static STRUCT_IF_C BFu17i_BFu17i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_L, BFu17i_BFu17i_L)
//============================================================================


struct  BFu17i_BFu17i_S  {
  unsigned int v1:17;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu17i_BFu17i_S) C1{ Fi:17 Fi:17 Fs}



static void Test_BFu17i_BFu17i_S()
{
  {
    init_simple_test("BFu17i_BFu17i_S");
    static STRUCT_IF_C BFu17i_BFu17i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_S");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_S, BFu17i_BFu17i_S)
//============================================================================


struct  BFu17i_BFu17i_Uc  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu17i_Uc) C1{ Fi:17 Fi:17 Fc}



static void Test_BFu17i_BFu17i_Uc()
{
  {
    init_simple_test("BFu17i_BFu17i_Uc");
    static STRUCT_IF_C BFu17i_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Uc");
    check_field_offset(lv, v3, 7, "BFu17i_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Uc, BFu17i_BFu17i_Uc)
//============================================================================


struct  BFu17i_BFu17i_Ui  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu17i_Ui) C1{ Fi:17 Fi:17 Fi}



static void Test_BFu17i_BFu17i_Ui()
{
  {
    init_simple_test("BFu17i_BFu17i_Ui");
    static STRUCT_IF_C BFu17i_BFu17i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Ui, BFu17i_BFu17i_Ui)
//============================================================================


struct  BFu17i_BFu17i_Ul  {
  unsigned int v1:17;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu17i_Ul) C1{ Fi:17 Fi:17 FL}



static void Test_BFu17i_BFu17i_Ul()
{
  {
    init_simple_test("BFu17i_BFu17i_Ul");
    static STRUCT_IF_C BFu17i_BFu17i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Ul, BFu17i_BFu17i_Ul)
//============================================================================


struct  BFu17i_BFu17i_Us  {
  unsigned int v1:17;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu17i_Us) C1{ Fi:17 Fi:17 Fs}



static void Test_BFu17i_BFu17i_Us()
{
  {
    init_simple_test("BFu17i_BFu17i_Us");
    static STRUCT_IF_C BFu17i_BFu17i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Us");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Us, BFu17i_BFu17i_Us)
//============================================================================


struct  BFu17i_BFu17i_Vp  {
  unsigned int v1:17;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu17i_BFu17i_Vp) C1{ Fi:17 Fi:17 Fp}



static void Test_BFu17i_BFu17i_Vp()
{
  {
    init_simple_test("BFu17i_BFu17i_Vp");
    static STRUCT_IF_C BFu17i_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17i_Vp, BFu17i_BFu17i_Vp)
//============================================================================


struct  BFu17i_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu17i_BFu17ll) C1{ Fi:17 FL:17}



static void Test_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll, BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFs17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed int v3:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17i) C1{ Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17i, BFu17i_BFu17ll_BFs17i)
//============================================================================


struct  BFu17i_BFu17ll_BFs17i_BFs17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17i_BFs17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17i_BFs17i, BFu17i_BFu17ll_BFs17i_BFs17i)
//============================================================================


struct  BFu17i_BFu17ll_BFs17i_BFs17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17i_BFs17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17ll_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17i_BFs17ll, BFu17i_BFu17ll_BFs17i_BFs17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFs17i_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17i_BFu17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17i_BFu17i, BFu17i_BFu17ll_BFs17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17ll_BFs17i_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17i_BFu17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17ll_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17i_BFu17ll, BFu17i_BFu17ll_BFs17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFs17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17ll, BFu17i_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFs17ll_BFs17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17ll_BFs17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17ll_BFs17i, BFu17i_BFu17ll_BFs17ll_BFs17i)
//============================================================================


struct  BFu17i_BFu17ll_BFs17ll_BFs17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17ll_BFs17ll, BFu17i_BFu17ll_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFs17ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17ll_BFu17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17ll_BFu17i, BFu17i_BFu17ll_BFs17ll_BFu17i)
//============================================================================


struct  BFu17i_BFu17ll_BFs17ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFs17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFs17ll_BFu17ll, BFu17i_BFu17ll_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu17ll_BFu15i) C1{ Fi:17 FL:17 Fi:15}



static void Test_BFu17i_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 2, 15, 1, "BFu17i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu15i, BFu17i_BFu17ll_BFu15i)
//============================================================================


struct  BFu17i_BFu17ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu17ll_BFu15ll) C1{ Fi:17 FL:17 FL:15}



static void Test_BFu17i_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 2, 15, 1, "BFu17i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu15ll, BFu17i_BFu17ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu17ll_BFu15s) C1{ Fi:17 FL:17 Fs:15}



static void Test_BFu17i_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu15s, BFu17i_BFu17ll_BFu15s)
//============================================================================


struct  BFu17i_BFu17ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu17ll_BFu16i) C1{ Fi:17 FL:17 Fi:16}



static void Test_BFu17i_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 2, 16, 1, "BFu17i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu16i, BFu17i_BFu17ll_BFu16i)
//============================================================================


struct  BFu17i_BFu17ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu17ll_BFu16ll) C1{ Fi:17 FL:17 FL:16}



static void Test_BFu17i_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 2, 16, 1, "BFu17i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu16ll, BFu17i_BFu17ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu17ll_BFu16s) C1{ Fi:17 FL:17 Fs:16}



static void Test_BFu17i_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu16s, BFu17i_BFu17ll_BFu16s)
//============================================================================


struct  BFu17i_BFu17ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17i) C1{ Fi:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17i, BFu17i_BFu17ll_BFu17i)
//============================================================================


struct  BFu17i_BFu17ll_BFu17i_BFs17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17i_BFs17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17i_BFs17i, BFu17i_BFu17ll_BFu17i_BFs17i)
//============================================================================


struct  BFu17i_BFu17ll_BFu17i_BFs17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17i_BFs17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17ll_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17i_BFs17ll, BFu17i_BFu17ll_BFu17i_BFs17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu17i_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17i_BFu17i) C1{ Fi:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17i_BFu17i, BFu17i_BFu17ll_BFu17i_BFu17i)
//============================================================================


struct  BFu17i_BFu17ll_BFu17i_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17i_BFu17ll) C1{ Fi:17 FL:17 Fi:17 FL:17}



static void Test_BFu17i_BFu17ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17i_BFu17ll, BFu17i_BFu17ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17ll, BFu17i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu17ll_BFs17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17ll_BFs17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17ll_BFs17i, BFu17i_BFu17ll_BFu17ll_BFs17i)
//============================================================================


struct  BFu17i_BFu17ll_BFu17ll_BFs17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17ll_BFs17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17ll_BFs17ll, BFu17i_BFu17ll_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu17ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17ll_BFu17i) C1{ Fi:17 FL:17 FL:17 Fi:17}



static void Test_BFu17i_BFu17ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17ll_BFu17i, BFu17i_BFu17ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu17i_BFu17ll_BFu17ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17i_BFu17ll_BFu17ll_BFu17ll) C1{ Fi:17 FL:17 FL:17 FL:17}



static void Test_BFu17i_BFu17ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17i_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu17ll_BFu17ll, BFu17i_BFu17ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu17ll_BFu1c) C1{ Fi:17 FL:17 Fc:1}



static void Test_BFu17i_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17i_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu1c, BFu17i_BFu17ll_BFu1c)
//============================================================================


struct  BFu17i_BFu17ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu17ll_BFu1i) C1{ Fi:17 FL:17 Fi:1}



static void Test_BFu17i_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17i_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu1i, BFu17i_BFu17ll_BFu1i)
//============================================================================


struct  BFu17i_BFu17ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu17ll_BFu1ll) C1{ Fi:17 FL:17 FL:1}



static void Test_BFu17i_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17i_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu1ll, BFu17i_BFu17ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu17ll_BFu1s) C1{ Fi:17 FL:17 Fs:1}



static void Test_BFu17i_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17i_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu1s, BFu17i_BFu17ll_BFu1s)
//============================================================================


struct  BFu17i_BFu17ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu17ll_BFu31i) C1{ Fi:17 FL:17 Fi:31}



static void Test_BFu17i_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu31i, BFu17i_BFu17ll_BFu31i)
//============================================================================


struct  BFu17i_BFu17ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu17ll_BFu31ll) C1{ Fi:17 FL:17 FL:31}



static void Test_BFu17i_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 31, 1, "BFu17i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 31, hide_ull(1LL<<30), "BFu17i_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu31ll, BFu17i_BFu17ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu17ll_BFu32i) C1{ Fi:17 FL:17 Fi:32}



static void Test_BFu17i_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu32i, BFu17i_BFu17ll_BFu32i)
//============================================================================


struct  BFu17i_BFu17ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu17ll_BFu32ll) C1{ Fi:17 FL:17 FL:32}



static void Test_BFu17i_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 32, 1, "BFu17i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 32, hide_ull(1LL<<31), "BFu17i_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu32ll, BFu17i_BFu17ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu17ll_BFu33) C1{ Fi:17 FL:17 FL:33}



static void Test_BFu17i_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 33, 1, "BFu17i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFu17i_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu33, BFu17i_BFu17ll_BFu33)
//============================================================================


struct  BFu17i_BFu17ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu17ll_BFu7c) C1{ Fi:17 FL:17 Fc:7}



static void Test_BFu17i_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu17i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu7c, BFu17i_BFu17ll_BFu7c)
//============================================================================


struct  BFu17i_BFu17ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu17ll_BFu7i) C1{ Fi:17 FL:17 Fi:7}



static void Test_BFu17i_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu7i, BFu17i_BFu17ll_BFu7i)
//============================================================================


struct  BFu17i_BFu17ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu17ll_BFu7ll) C1{ Fi:17 FL:17 FL:7}



static void Test_BFu17i_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu7ll, BFu17i_BFu17ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu17ll_BFu7s) C1{ Fi:17 FL:17 Fs:7}



static void Test_BFu17i_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu7s, BFu17i_BFu17ll_BFu7s)
//============================================================================


struct  BFu17i_BFu17ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu17ll_BFu8c) C1{ Fi:17 FL:17 Fc:8}



static void Test_BFu17i_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu17i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu8c, BFu17i_BFu17ll_BFu8c)
//============================================================================


struct  BFu17i_BFu17ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu17ll_BFu8i) C1{ Fi:17 FL:17 Fi:8}



static void Test_BFu17i_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu8i, BFu17i_BFu17ll_BFu8i)
//============================================================================


struct  BFu17i_BFu17ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu17ll_BFu8ll) C1{ Fi:17 FL:17 FL:8}



static void Test_BFu17i_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu8ll, BFu17i_BFu17ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu17ll_BFu8s) C1{ Fi:17 FL:17 Fs:8}



static void Test_BFu17i_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu8s, BFu17i_BFu17ll_BFu8s)
//============================================================================


struct  BFu17i_BFu17ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu17ll_BFu9i) C1{ Fi:17 FL:17 Fi:9}



static void Test_BFu17i_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu9i, BFu17i_BFu17ll_BFu9i)
//============================================================================


struct  BFu17i_BFu17ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu17ll_BFu9ll) C1{ Fi:17 FL:17 FL:9}



static void Test_BFu17i_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu9ll, BFu17i_BFu17ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu17ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu17ll_BFu9s) C1{ Fi:17 FL:17 Fs:9}



static void Test_BFu17i_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_BFu9s, BFu17i_BFu17ll_BFu9s)
//============================================================================


struct  BFu17i_BFu17ll_C  {
  unsigned int v1:17;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu17i_BFu17ll_C) C1{ Fi:17 FL:17 Fc}



static void Test_BFu17i_BFu17ll_C()
{
  {
    init_simple_test("BFu17i_BFu17ll_C");
    static STRUCT_IF_C BFu17i_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_C");
    check_field_offset(lv, v3, 5, "BFu17i_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_C, BFu17i_BFu17ll_C)
//============================================================================


struct  BFu17i_BFu17ll_D  {
  unsigned int v1:17;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu17i_BFu17ll_D) C1{ Fi:17 FL:17 FL}



static void Test_BFu17i_BFu17ll_D()
{
  {
    init_simple_test("BFu17i_BFu17ll_D");
    static STRUCT_IF_C BFu17i_BFu17ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_D, BFu17i_BFu17ll_D)
//============================================================================


struct  BFu17i_BFu17ll_F  {
  unsigned int v1:17;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu17i_BFu17ll_F) C1{ Fi:17 FL:17 Fi}



static void Test_BFu17i_BFu17ll_F()
{
  {
    init_simple_test("BFu17i_BFu17ll_F");
    static STRUCT_IF_C BFu17i_BFu17ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_F, BFu17i_BFu17ll_F)
//============================================================================


struct  BFu17i_BFu17ll_I  {
  unsigned int v1:17;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu17i_BFu17ll_I) C1{ Fi:17 FL:17 Fi}



static void Test_BFu17i_BFu17ll_I()
{
  {
    init_simple_test("BFu17i_BFu17ll_I");
    static STRUCT_IF_C BFu17i_BFu17ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_I, BFu17i_BFu17ll_I)
//============================================================================


struct  BFu17i_BFu17ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu17i_BFu17ll_Ip) C1{ Fi:17 FL:17 Fp}



static void Test_BFu17i_BFu17ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu17ll_Ip");
    static STRUCT_IF_C BFu17i_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Ip, BFu17i_BFu17ll_Ip)
//============================================================================


struct  BFu17i_BFu17ll_L  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu17ll_L) C1{ Fi:17 FL:17 FL}



static void Test_BFu17i_BFu17ll_L()
{
  {
    init_simple_test("BFu17i_BFu17ll_L");
    static STRUCT_IF_C BFu17i_BFu17ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_L, BFu17i_BFu17ll_L)
//============================================================================


struct  BFu17i_BFu17ll_S  {
  unsigned int v1:17;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu17i_BFu17ll_S) C1{ Fi:17 FL:17 Fs}



static void Test_BFu17i_BFu17ll_S()
{
  {
    init_simple_test("BFu17i_BFu17ll_S");
    static STRUCT_IF_C BFu17i_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_S");
    check_field_offset(lv, v3, 6, "BFu17i_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_S, BFu17i_BFu17ll_S)
//============================================================================


struct  BFu17i_BFu17ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu17ll_Uc) C1{ Fi:17 FL:17 Fc}



static void Test_BFu17i_BFu17ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu17ll_Uc");
    static STRUCT_IF_C BFu17i_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Uc");
    check_field_offset(lv, v3, 5, "BFu17i_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Uc, BFu17i_BFu17ll_Uc)
//============================================================================


struct  BFu17i_BFu17ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu17ll_Ui) C1{ Fi:17 FL:17 Fi}



static void Test_BFu17i_BFu17ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu17ll_Ui");
    static STRUCT_IF_C BFu17i_BFu17ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Ui, BFu17i_BFu17ll_Ui)
//============================================================================


struct  BFu17i_BFu17ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu17ll_Ul) C1{ Fi:17 FL:17 FL}



static void Test_BFu17i_BFu17ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu17ll_Ul");
    static STRUCT_IF_C BFu17i_BFu17ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Ul, BFu17i_BFu17ll_Ul)
//============================================================================


struct  BFu17i_BFu17ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu17ll_Us) C1{ Fi:17 FL:17 Fs}



static void Test_BFu17i_BFu17ll_Us()
{
  {
    init_simple_test("BFu17i_BFu17ll_Us");
    static STRUCT_IF_C BFu17i_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Us");
    check_field_offset(lv, v3, 6, "BFu17i_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Us, BFu17i_BFu17ll_Us)
//============================================================================


struct  BFu17i_BFu17ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu17i_BFu17ll_Vp) C1{ Fi:17 FL:17 Fp}



static void Test_BFu17i_BFu17ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu17ll_Vp");
    static STRUCT_IF_C BFu17i_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu17ll_Vp, BFu17i_BFu17ll_Vp)
//============================================================================


struct  BFu17i_BFu1c  {
  unsigned int v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu17i_BFu1c) C1{ Fi:17 Fc:1}



static void Test_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c, BFu17i_BFu1c)
//============================================================================


struct  BFu17i_BFu1c_BFu15i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu1c_BFu15i) C1{ Fi:17 Fc:1 Fi:15}



static void Test_BFu17i_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu15i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu15i, BFu17i_BFu1c_BFu15i)
//============================================================================


struct  BFu17i_BFu1c_BFu15ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu1c_BFu15ll) C1{ Fi:17 Fc:1 FL:15}



static void Test_BFu17i_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu15ll, BFu17i_BFu1c_BFu15ll)
//============================================================================


struct  BFu17i_BFu1c_BFu15s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu1c_BFu15s) C1{ Fi:17 Fc:1 Fs:15}



static void Test_BFu17i_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu15s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu15s, BFu17i_BFu1c_BFu15s)
//============================================================================


struct  BFu17i_BFu1c_BFu16i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu1c_BFu16i) C1{ Fi:17 Fc:1 Fi:16}



static void Test_BFu17i_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu16i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu16i, BFu17i_BFu1c_BFu16i)
//============================================================================


struct  BFu17i_BFu1c_BFu16ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu1c_BFu16ll) C1{ Fi:17 Fc:1 FL:16}



static void Test_BFu17i_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu16ll, BFu17i_BFu1c_BFu16ll)
//============================================================================


struct  BFu17i_BFu1c_BFu16s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu1c_BFu16s) C1{ Fi:17 Fc:1 Fs:16}



static void Test_BFu17i_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu16s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu16s, BFu17i_BFu1c_BFu16s)
//============================================================================


struct  BFu17i_BFu1c_BFu17i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu1c_BFu17i) C1{ Fi:17 Fc:1 Fi:17}



static void Test_BFu17i_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu17i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu17i, BFu17i_BFu1c_BFu17i)
//============================================================================


struct  BFu17i_BFu1c_BFu17ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu1c_BFu17ll) C1{ Fi:17 Fc:1 FL:17}



static void Test_BFu17i_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu17ll, BFu17i_BFu1c_BFu17ll)
//============================================================================


struct  BFu17i_BFu1c_BFu1c  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu1c_BFu1c) C1{ Fi:17 Fc:1 Fc:1}



static void Test_BFu17i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu1c");
    static STRUCT_IF_C BFu17i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu1c, BFu17i_BFu1c_BFu1c)
//============================================================================


struct  BFu17i_BFu1c_BFu1i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu1c_BFu1i) C1{ Fi:17 Fc:1 Fi:1}



static void Test_BFu17i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu1i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu1i, BFu17i_BFu1c_BFu1i)
//============================================================================


struct  BFu17i_BFu1c_BFu1ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu1c_BFu1ll) C1{ Fi:17 Fc:1 FL:1}



static void Test_BFu17i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu1ll, BFu17i_BFu1c_BFu1ll)
//============================================================================


struct  BFu17i_BFu1c_BFu1s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu1c_BFu1s) C1{ Fi:17 Fc:1 Fs:1}



static void Test_BFu17i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu1s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu1s, BFu17i_BFu1c_BFu1s)
//============================================================================


struct  BFu17i_BFu1c_BFu31i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu1c_BFu31i) C1{ Fi:17 Fc:1 Fi:31}



static void Test_BFu17i_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu31i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu31i, BFu17i_BFu1c_BFu31i)
//============================================================================


struct  BFu17i_BFu1c_BFu31ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu1c_BFu31ll) C1{ Fi:17 Fc:1 FL:31}



static void Test_BFu17i_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu31ll, BFu17i_BFu1c_BFu31ll)
//============================================================================


struct  BFu17i_BFu1c_BFu32i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu1c_BFu32i) C1{ Fi:17 Fc:1 Fi:32}



static void Test_BFu17i_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu32i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu32i, BFu17i_BFu1c_BFu32i)
//============================================================================


struct  BFu17i_BFu1c_BFu32ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu1c_BFu32ll) C1{ Fi:17 Fc:1 FL:32}



static void Test_BFu17i_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu32ll, BFu17i_BFu1c_BFu32ll)
//============================================================================


struct  BFu17i_BFu1c_BFu33  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu1c_BFu33) C1{ Fi:17 Fc:1 FL:33}



static void Test_BFu17i_BFu1c_BFu33()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu33");
    static STRUCT_IF_C BFu17i_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu33, BFu17i_BFu1c_BFu33)
//============================================================================


struct  BFu17i_BFu1c_BFu7c  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu1c_BFu7c) C1{ Fi:17 Fc:1 Fc:7}



static void Test_BFu17i_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu7c");
    static STRUCT_IF_C BFu17i_BFu1c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu7c, BFu17i_BFu1c_BFu7c)
//============================================================================


struct  BFu17i_BFu1c_BFu7i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu1c_BFu7i) C1{ Fi:17 Fc:1 Fi:7}



static void Test_BFu17i_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu7i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu7i, BFu17i_BFu1c_BFu7i)
//============================================================================


struct  BFu17i_BFu1c_BFu7ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu1c_BFu7ll) C1{ Fi:17 Fc:1 FL:7}



static void Test_BFu17i_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu7ll, BFu17i_BFu1c_BFu7ll)
//============================================================================


struct  BFu17i_BFu1c_BFu7s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu1c_BFu7s) C1{ Fi:17 Fc:1 Fs:7}



static void Test_BFu17i_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu7s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu7s, BFu17i_BFu1c_BFu7s)
//============================================================================


struct  BFu17i_BFu1c_BFu8c  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu1c_BFu8c) C1{ Fi:17 Fc:1 Fc:8}



static void Test_BFu17i_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu8c");
    static STRUCT_IF_C BFu17i_BFu1c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu8c, BFu17i_BFu1c_BFu8c)
//============================================================================


struct  BFu17i_BFu1c_BFu8i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu1c_BFu8i) C1{ Fi:17 Fc:1 Fi:8}



static void Test_BFu17i_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu8i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu8i, BFu17i_BFu1c_BFu8i)
//============================================================================


struct  BFu17i_BFu1c_BFu8ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu1c_BFu8ll) C1{ Fi:17 Fc:1 FL:8}



static void Test_BFu17i_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu8ll, BFu17i_BFu1c_BFu8ll)
//============================================================================


struct  BFu17i_BFu1c_BFu8s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu1c_BFu8s) C1{ Fi:17 Fc:1 Fs:8}



static void Test_BFu17i_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu8s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu8s, BFu17i_BFu1c_BFu8s)
//============================================================================


struct  BFu17i_BFu1c_BFu9i  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu1c_BFu9i) C1{ Fi:17 Fc:1 Fi:9}



static void Test_BFu17i_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu9i");
    static STRUCT_IF_C BFu17i_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu9i, BFu17i_BFu1c_BFu9i)
//============================================================================


struct  BFu17i_BFu1c_BFu9ll  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu1c_BFu9ll) C1{ Fi:17 Fc:1 FL:9}



static void Test_BFu17i_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu9ll, BFu17i_BFu1c_BFu9ll)
//============================================================================


struct  BFu17i_BFu1c_BFu9s  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu1c_BFu9s) C1{ Fi:17 Fc:1 Fs:9}



static void Test_BFu17i_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu1c_BFu9s");
    static STRUCT_IF_C BFu17i_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_BFu9s, BFu17i_BFu1c_BFu9s)
//============================================================================


struct  BFu17i_BFu1c_C  {
  unsigned int v1:17;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu17i_BFu1c_C) C1{ Fi:17 Fc:1 Fc}



static void Test_BFu17i_BFu1c_C()
{
  {
    init_simple_test("BFu17i_BFu1c_C");
    static STRUCT_IF_C BFu17i_BFu1c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_C, BFu17i_BFu1c_C)
//============================================================================


struct  BFu17i_BFu1c_D  {
  unsigned int v1:17;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu17i_BFu1c_D) C1{ Fi:17 Fc:1 FL}



static void Test_BFu17i_BFu1c_D()
{
  {
    init_simple_test("BFu17i_BFu1c_D");
    static STRUCT_IF_C BFu17i_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_D, BFu17i_BFu1c_D)
//============================================================================


struct  BFu17i_BFu1c_F  {
  unsigned int v1:17;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu17i_BFu1c_F) C1{ Fi:17 Fc:1 Fi}



static void Test_BFu17i_BFu1c_F()
{
  {
    init_simple_test("BFu17i_BFu1c_F");
    static STRUCT_IF_C BFu17i_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_F, BFu17i_BFu1c_F)
//============================================================================


struct  BFu17i_BFu1c_I  {
  unsigned int v1:17;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu17i_BFu1c_I) C1{ Fi:17 Fc:1 Fi}



static void Test_BFu17i_BFu1c_I()
{
  {
    init_simple_test("BFu17i_BFu1c_I");
    static STRUCT_IF_C BFu17i_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_I, BFu17i_BFu1c_I)
//============================================================================


struct  BFu17i_BFu1c_Ip  {
  unsigned int v1:17;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu17i_BFu1c_Ip) C1{ Fi:17 Fc:1 Fp}



static void Test_BFu17i_BFu1c_Ip()
{
  {
    init_simple_test("BFu17i_BFu1c_Ip");
    static STRUCT_IF_C BFu17i_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Ip, BFu17i_BFu1c_Ip)
//============================================================================


struct  BFu17i_BFu1c_L  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu1c_L) C1{ Fi:17 Fc:1 FL}



static void Test_BFu17i_BFu1c_L()
{
  {
    init_simple_test("BFu17i_BFu1c_L");
    static STRUCT_IF_C BFu17i_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_L, BFu17i_BFu1c_L)
//============================================================================


struct  BFu17i_BFu1c_S  {
  unsigned int v1:17;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu17i_BFu1c_S) C1{ Fi:17 Fc:1 Fs}



static void Test_BFu17i_BFu1c_S()
{
  {
    init_simple_test("BFu17i_BFu1c_S");
    static STRUCT_IF_C BFu17i_BFu1c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_S, BFu17i_BFu1c_S)
//============================================================================


struct  BFu17i_BFu1c_Uc  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu1c_Uc) C1{ Fi:17 Fc:1 Fc}



static void Test_BFu17i_BFu1c_Uc()
{
  {
    init_simple_test("BFu17i_BFu1c_Uc");
    static STRUCT_IF_C BFu17i_BFu1c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Uc, BFu17i_BFu1c_Uc)
//============================================================================


struct  BFu17i_BFu1c_Ui  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu1c_Ui) C1{ Fi:17 Fc:1 Fi}



static void Test_BFu17i_BFu1c_Ui()
{
  {
    init_simple_test("BFu17i_BFu1c_Ui");
    static STRUCT_IF_C BFu17i_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Ui, BFu17i_BFu1c_Ui)
//============================================================================


struct  BFu17i_BFu1c_Ul  {
  unsigned int v1:17;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu1c_Ul) C1{ Fi:17 Fc:1 FL}



static void Test_BFu17i_BFu1c_Ul()
{
  {
    init_simple_test("BFu17i_BFu1c_Ul");
    static STRUCT_IF_C BFu17i_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Ul, BFu17i_BFu1c_Ul)
//============================================================================


struct  BFu17i_BFu1c_Us  {
  unsigned int v1:17;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu1c_Us) C1{ Fi:17 Fc:1 Fs}



static void Test_BFu17i_BFu1c_Us()
{
  {
    init_simple_test("BFu17i_BFu1c_Us");
    static STRUCT_IF_C BFu17i_BFu1c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Us, BFu17i_BFu1c_Us)
//============================================================================


struct  BFu17i_BFu1c_Vp  {
  unsigned int v1:17;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu17i_BFu1c_Vp) C1{ Fi:17 Fc:1 Fp}



static void Test_BFu17i_BFu1c_Vp()
{
  {
    init_simple_test("BFu17i_BFu1c_Vp");
    static STRUCT_IF_C BFu17i_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1c_Vp, BFu17i_BFu1c_Vp)
//============================================================================


struct  BFu17i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu17i_BFu1i) C1{ Fi:17 Fi:1}



static void Test_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i, BFu17i_BFu1i)
//============================================================================


struct  BFu17i_BFu1i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu1i_BFu15i) C1{ Fi:17 Fi:1 Fi:15}



static void Test_BFu17i_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu15i, BFu17i_BFu1i_BFu15i)
//============================================================================


struct  BFu17i_BFu1i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu1i_BFu15ll) C1{ Fi:17 Fi:1 FL:15}



static void Test_BFu17i_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu15ll, BFu17i_BFu1i_BFu15ll)
//============================================================================


struct  BFu17i_BFu1i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu1i_BFu15s) C1{ Fi:17 Fi:1 Fs:15}



static void Test_BFu17i_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu15s, BFu17i_BFu1i_BFu15s)
//============================================================================


struct  BFu17i_BFu1i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu1i_BFu16i) C1{ Fi:17 Fi:1 Fi:16}



static void Test_BFu17i_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu16i, BFu17i_BFu1i_BFu16i)
//============================================================================


struct  BFu17i_BFu1i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu1i_BFu16ll) C1{ Fi:17 Fi:1 FL:16}



static void Test_BFu17i_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu16ll, BFu17i_BFu1i_BFu16ll)
//============================================================================


struct  BFu17i_BFu1i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu1i_BFu16s) C1{ Fi:17 Fi:1 Fs:16}



static void Test_BFu17i_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu16s, BFu17i_BFu1i_BFu16s)
//============================================================================


struct  BFu17i_BFu1i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu1i_BFu17i) C1{ Fi:17 Fi:1 Fi:17}



static void Test_BFu17i_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu17i, BFu17i_BFu1i_BFu17i)
//============================================================================


struct  BFu17i_BFu1i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu1i_BFu17ll) C1{ Fi:17 Fi:1 FL:17}



static void Test_BFu17i_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu17ll, BFu17i_BFu1i_BFu17ll)
//============================================================================


struct  BFu17i_BFu1i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu1i_BFu1c) C1{ Fi:17 Fi:1 Fc:1}



static void Test_BFu17i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu1c, BFu17i_BFu1i_BFu1c)
//============================================================================


struct  BFu17i_BFu1i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu1i_BFu1i) C1{ Fi:17 Fi:1 Fi:1}



static void Test_BFu17i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu1i, BFu17i_BFu1i_BFu1i)
//============================================================================


struct  BFu17i_BFu1i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu1i_BFu1ll) C1{ Fi:17 Fi:1 FL:1}



static void Test_BFu17i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu1ll, BFu17i_BFu1i_BFu1ll)
//============================================================================


struct  BFu17i_BFu1i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu1i_BFu1s) C1{ Fi:17 Fi:1 Fs:1}



static void Test_BFu17i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu1s, BFu17i_BFu1i_BFu1s)
//============================================================================


struct  BFu17i_BFu1i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu1i_BFu31i) C1{ Fi:17 Fi:1 Fi:31}



static void Test_BFu17i_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu31i, BFu17i_BFu1i_BFu31i)
//============================================================================


struct  BFu17i_BFu1i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu1i_BFu31ll) C1{ Fi:17 Fi:1 FL:31}



static void Test_BFu17i_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu31ll, BFu17i_BFu1i_BFu31ll)
//============================================================================


struct  BFu17i_BFu1i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu1i_BFu32i) C1{ Fi:17 Fi:1 Fi:32}



static void Test_BFu17i_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu32i, BFu17i_BFu1i_BFu32i)
//============================================================================


struct  BFu17i_BFu1i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu1i_BFu32ll) C1{ Fi:17 Fi:1 FL:32}



static void Test_BFu17i_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu32ll, BFu17i_BFu1i_BFu32ll)
//============================================================================


struct  BFu17i_BFu1i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu1i_BFu33) C1{ Fi:17 Fi:1 FL:33}



static void Test_BFu17i_BFu1i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu33");
    static STRUCT_IF_C BFu17i_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu33, BFu17i_BFu1i_BFu33)
//============================================================================


struct  BFu17i_BFu1i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu1i_BFu7c) C1{ Fi:17 Fi:1 Fc:7}



static void Test_BFu17i_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu7c, BFu17i_BFu1i_BFu7c)
//============================================================================


struct  BFu17i_BFu1i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu1i_BFu7i) C1{ Fi:17 Fi:1 Fi:7}



static void Test_BFu17i_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu7i, BFu17i_BFu1i_BFu7i)
//============================================================================


struct  BFu17i_BFu1i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu1i_BFu7ll) C1{ Fi:17 Fi:1 FL:7}



static void Test_BFu17i_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu7ll, BFu17i_BFu1i_BFu7ll)
//============================================================================


struct  BFu17i_BFu1i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu1i_BFu7s) C1{ Fi:17 Fi:1 Fs:7}



static void Test_BFu17i_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu7s, BFu17i_BFu1i_BFu7s)
//============================================================================


struct  BFu17i_BFu1i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu1i_BFu8c) C1{ Fi:17 Fi:1 Fc:8}



static void Test_BFu17i_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu8c, BFu17i_BFu1i_BFu8c)
//============================================================================


struct  BFu17i_BFu1i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu1i_BFu8i) C1{ Fi:17 Fi:1 Fi:8}



static void Test_BFu17i_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu8i, BFu17i_BFu1i_BFu8i)
//============================================================================


struct  BFu17i_BFu1i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu1i_BFu8ll) C1{ Fi:17 Fi:1 FL:8}



static void Test_BFu17i_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu8ll, BFu17i_BFu1i_BFu8ll)
//============================================================================


struct  BFu17i_BFu1i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu1i_BFu8s) C1{ Fi:17 Fi:1 Fs:8}



static void Test_BFu17i_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu8s, BFu17i_BFu1i_BFu8s)
//============================================================================


struct  BFu17i_BFu1i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu1i_BFu9i) C1{ Fi:17 Fi:1 Fi:9}



static void Test_BFu17i_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu9i, BFu17i_BFu1i_BFu9i)
//============================================================================


struct  BFu17i_BFu1i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu1i_BFu9ll) C1{ Fi:17 Fi:1 FL:9}



static void Test_BFu17i_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu9ll, BFu17i_BFu1i_BFu9ll)
//============================================================================


struct  BFu17i_BFu1i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu1i_BFu9s) C1{ Fi:17 Fi:1 Fs:9}



static void Test_BFu17i_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu1i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_BFu9s, BFu17i_BFu1i_BFu9s)
//============================================================================


struct  BFu17i_BFu1i_C  {
  unsigned int v1:17;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu17i_BFu1i_C) C1{ Fi:17 Fi:1 Fc}



static void Test_BFu17i_BFu1i_C()
{
  {
    init_simple_test("BFu17i_BFu1i_C");
    static STRUCT_IF_C BFu17i_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_C, BFu17i_BFu1i_C)
//============================================================================


struct  BFu17i_BFu1i_D  {
  unsigned int v1:17;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu17i_BFu1i_D) C1{ Fi:17 Fi:1 FL}



static void Test_BFu17i_BFu1i_D()
{
  {
    init_simple_test("BFu17i_BFu1i_D");
    static STRUCT_IF_C BFu17i_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_D, BFu17i_BFu1i_D)
//============================================================================


struct  BFu17i_BFu1i_F  {
  unsigned int v1:17;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu17i_BFu1i_F) C1{ Fi:17 Fi:1 Fi}



static void Test_BFu17i_BFu1i_F()
{
  {
    init_simple_test("BFu17i_BFu1i_F");
    static STRUCT_IF_C BFu17i_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_F, BFu17i_BFu1i_F)
//============================================================================


struct  BFu17i_BFu1i_I  {
  unsigned int v1:17;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu17i_BFu1i_I) C1{ Fi:17 Fi:1 Fi}



static void Test_BFu17i_BFu1i_I()
{
  {
    init_simple_test("BFu17i_BFu1i_I");
    static STRUCT_IF_C BFu17i_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_I, BFu17i_BFu1i_I)
//============================================================================


struct  BFu17i_BFu1i_Ip  {
  unsigned int v1:17;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu17i_BFu1i_Ip) C1{ Fi:17 Fi:1 Fp}



static void Test_BFu17i_BFu1i_Ip()
{
  {
    init_simple_test("BFu17i_BFu1i_Ip");
    static STRUCT_IF_C BFu17i_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Ip, BFu17i_BFu1i_Ip)
//============================================================================


struct  BFu17i_BFu1i_L  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu1i_L) C1{ Fi:17 Fi:1 FL}



static void Test_BFu17i_BFu1i_L()
{
  {
    init_simple_test("BFu17i_BFu1i_L");
    static STRUCT_IF_C BFu17i_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_L, BFu17i_BFu1i_L)
//============================================================================


struct  BFu17i_BFu1i_S  {
  unsigned int v1:17;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu17i_BFu1i_S) C1{ Fi:17 Fi:1 Fs}



static void Test_BFu17i_BFu1i_S()
{
  {
    init_simple_test("BFu17i_BFu1i_S");
    static STRUCT_IF_C BFu17i_BFu1i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_S, BFu17i_BFu1i_S)
//============================================================================


struct  BFu17i_BFu1i_Uc  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu1i_Uc) C1{ Fi:17 Fi:1 Fc}



static void Test_BFu17i_BFu1i_Uc()
{
  {
    init_simple_test("BFu17i_BFu1i_Uc");
    static STRUCT_IF_C BFu17i_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Uc, BFu17i_BFu1i_Uc)
//============================================================================


struct  BFu17i_BFu1i_Ui  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu1i_Ui) C1{ Fi:17 Fi:1 Fi}



static void Test_BFu17i_BFu1i_Ui()
{
  {
    init_simple_test("BFu17i_BFu1i_Ui");
    static STRUCT_IF_C BFu17i_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Ui, BFu17i_BFu1i_Ui)
//============================================================================


struct  BFu17i_BFu1i_Ul  {
  unsigned int v1:17;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu1i_Ul) C1{ Fi:17 Fi:1 FL}



static void Test_BFu17i_BFu1i_Ul()
{
  {
    init_simple_test("BFu17i_BFu1i_Ul");
    static STRUCT_IF_C BFu17i_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Ul, BFu17i_BFu1i_Ul)
//============================================================================


struct  BFu17i_BFu1i_Us  {
  unsigned int v1:17;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu1i_Us) C1{ Fi:17 Fi:1 Fs}



static void Test_BFu17i_BFu1i_Us()
{
  {
    init_simple_test("BFu17i_BFu1i_Us");
    static STRUCT_IF_C BFu17i_BFu1i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Us, BFu17i_BFu1i_Us)
//============================================================================


struct  BFu17i_BFu1i_Vp  {
  unsigned int v1:17;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu17i_BFu1i_Vp) C1{ Fi:17 Fi:1 Fp}



static void Test_BFu17i_BFu1i_Vp()
{
  {
    init_simple_test("BFu17i_BFu1i_Vp");
    static STRUCT_IF_C BFu17i_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1i_Vp, BFu17i_BFu1i_Vp)
//============================================================================


struct  BFu17i_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu17i_BFu1ll) C1{ Fi:17 FL:1}



static void Test_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll, BFu17i_BFu1ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu1ll_BFu15i) C1{ Fi:17 FL:1 Fi:15}



static void Test_BFu17i_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu15i, BFu17i_BFu1ll_BFu15i)
//============================================================================


struct  BFu17i_BFu1ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu1ll_BFu15ll) C1{ Fi:17 FL:1 FL:15}



static void Test_BFu17i_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu15ll, BFu17i_BFu1ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu1ll_BFu15s) C1{ Fi:17 FL:1 Fs:15}



static void Test_BFu17i_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu15s, BFu17i_BFu1ll_BFu15s)
//============================================================================


struct  BFu17i_BFu1ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu1ll_BFu16i) C1{ Fi:17 FL:1 Fi:16}



static void Test_BFu17i_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu16i, BFu17i_BFu1ll_BFu16i)
//============================================================================


struct  BFu17i_BFu1ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu1ll_BFu16ll) C1{ Fi:17 FL:1 FL:16}



static void Test_BFu17i_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu16ll, BFu17i_BFu1ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu1ll_BFu16s) C1{ Fi:17 FL:1 Fs:16}



static void Test_BFu17i_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu16s, BFu17i_BFu1ll_BFu16s)
//============================================================================


struct  BFu17i_BFu1ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu1ll_BFu17i) C1{ Fi:17 FL:1 Fi:17}



static void Test_BFu17i_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu17i, BFu17i_BFu1ll_BFu17i)
//============================================================================


struct  BFu17i_BFu1ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu1ll_BFu17ll) C1{ Fi:17 FL:1 FL:17}



static void Test_BFu17i_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu17ll, BFu17i_BFu1ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu1ll_BFu1c) C1{ Fi:17 FL:1 Fc:1}



static void Test_BFu17i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu1c, BFu17i_BFu1ll_BFu1c)
//============================================================================


struct  BFu17i_BFu1ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu1ll_BFu1i) C1{ Fi:17 FL:1 Fi:1}



static void Test_BFu17i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu1i, BFu17i_BFu1ll_BFu1i)
//============================================================================


struct  BFu17i_BFu1ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu1ll_BFu1ll) C1{ Fi:17 FL:1 FL:1}



static void Test_BFu17i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu1ll, BFu17i_BFu1ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu1ll_BFu1s) C1{ Fi:17 FL:1 Fs:1}



static void Test_BFu17i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu1s, BFu17i_BFu1ll_BFu1s)
//============================================================================


struct  BFu17i_BFu1ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu1ll_BFu31i) C1{ Fi:17 FL:1 Fi:31}



static void Test_BFu17i_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu31i, BFu17i_BFu1ll_BFu31i)
//============================================================================


struct  BFu17i_BFu1ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu1ll_BFu31ll) C1{ Fi:17 FL:1 FL:31}



static void Test_BFu17i_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu31ll, BFu17i_BFu1ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu1ll_BFu32i) C1{ Fi:17 FL:1 Fi:32}



static void Test_BFu17i_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu32i, BFu17i_BFu1ll_BFu32i)
//============================================================================


struct  BFu17i_BFu1ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu1ll_BFu32ll) C1{ Fi:17 FL:1 FL:32}



static void Test_BFu17i_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu32ll, BFu17i_BFu1ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu1ll_BFu33) C1{ Fi:17 FL:1 FL:33}



static void Test_BFu17i_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu33, BFu17i_BFu1ll_BFu33)
//============================================================================


struct  BFu17i_BFu1ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu1ll_BFu7c) C1{ Fi:17 FL:1 Fc:7}



static void Test_BFu17i_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu7c, BFu17i_BFu1ll_BFu7c)
//============================================================================


struct  BFu17i_BFu1ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu1ll_BFu7i) C1{ Fi:17 FL:1 Fi:7}



static void Test_BFu17i_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu7i, BFu17i_BFu1ll_BFu7i)
//============================================================================


struct  BFu17i_BFu1ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu1ll_BFu7ll) C1{ Fi:17 FL:1 FL:7}



static void Test_BFu17i_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu7ll, BFu17i_BFu1ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu1ll_BFu7s) C1{ Fi:17 FL:1 Fs:7}



static void Test_BFu17i_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu7s, BFu17i_BFu1ll_BFu7s)
//============================================================================


struct  BFu17i_BFu1ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu1ll_BFu8c) C1{ Fi:17 FL:1 Fc:8}



static void Test_BFu17i_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu8c, BFu17i_BFu1ll_BFu8c)
//============================================================================


struct  BFu17i_BFu1ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu1ll_BFu8i) C1{ Fi:17 FL:1 Fi:8}



static void Test_BFu17i_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu8i, BFu17i_BFu1ll_BFu8i)
//============================================================================


struct  BFu17i_BFu1ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu1ll_BFu8ll) C1{ Fi:17 FL:1 FL:8}



static void Test_BFu17i_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu8ll, BFu17i_BFu1ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu1ll_BFu8s) C1{ Fi:17 FL:1 Fs:8}



static void Test_BFu17i_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu8s, BFu17i_BFu1ll_BFu8s)
//============================================================================


struct  BFu17i_BFu1ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu1ll_BFu9i) C1{ Fi:17 FL:1 Fi:9}



static void Test_BFu17i_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu9i, BFu17i_BFu1ll_BFu9i)
//============================================================================


struct  BFu17i_BFu1ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu1ll_BFu9ll) C1{ Fi:17 FL:1 FL:9}



static void Test_BFu17i_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu9ll, BFu17i_BFu1ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu1ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu1ll_BFu9s) C1{ Fi:17 FL:1 Fs:9}



static void Test_BFu17i_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_BFu9s, BFu17i_BFu1ll_BFu9s)
//============================================================================


struct  BFu17i_BFu1ll_C  {
  unsigned int v1:17;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu17i_BFu1ll_C) C1{ Fi:17 FL:1 Fc}



static void Test_BFu17i_BFu1ll_C()
{
  {
    init_simple_test("BFu17i_BFu1ll_C");
    static STRUCT_IF_C BFu17i_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_C, BFu17i_BFu1ll_C)
//============================================================================


struct  BFu17i_BFu1ll_D  {
  unsigned int v1:17;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu17i_BFu1ll_D) C1{ Fi:17 FL:1 FL}



static void Test_BFu17i_BFu1ll_D()
{
  {
    init_simple_test("BFu17i_BFu1ll_D");
    static STRUCT_IF_C BFu17i_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_D, BFu17i_BFu1ll_D)
//============================================================================


struct  BFu17i_BFu1ll_F  {
  unsigned int v1:17;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu17i_BFu1ll_F) C1{ Fi:17 FL:1 Fi}



static void Test_BFu17i_BFu1ll_F()
{
  {
    init_simple_test("BFu17i_BFu1ll_F");
    static STRUCT_IF_C BFu17i_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_F, BFu17i_BFu1ll_F)
//============================================================================


struct  BFu17i_BFu1ll_I  {
  unsigned int v1:17;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu17i_BFu1ll_I) C1{ Fi:17 FL:1 Fi}



static void Test_BFu17i_BFu1ll_I()
{
  {
    init_simple_test("BFu17i_BFu1ll_I");
    static STRUCT_IF_C BFu17i_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_I, BFu17i_BFu1ll_I)
//============================================================================


struct  BFu17i_BFu1ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu17i_BFu1ll_Ip) C1{ Fi:17 FL:1 Fp}



static void Test_BFu17i_BFu1ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu1ll_Ip");
    static STRUCT_IF_C BFu17i_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Ip, BFu17i_BFu1ll_Ip)
//============================================================================


struct  BFu17i_BFu1ll_L  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu1ll_L) C1{ Fi:17 FL:1 FL}



static void Test_BFu17i_BFu1ll_L()
{
  {
    init_simple_test("BFu17i_BFu1ll_L");
    static STRUCT_IF_C BFu17i_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_L, BFu17i_BFu1ll_L)
//============================================================================


struct  BFu17i_BFu1ll_S  {
  unsigned int v1:17;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu17i_BFu1ll_S) C1{ Fi:17 FL:1 Fs}



static void Test_BFu17i_BFu1ll_S()
{
  {
    init_simple_test("BFu17i_BFu1ll_S");
    static STRUCT_IF_C BFu17i_BFu1ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_S, BFu17i_BFu1ll_S)
//============================================================================


struct  BFu17i_BFu1ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu1ll_Uc) C1{ Fi:17 FL:1 Fc}



static void Test_BFu17i_BFu1ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu1ll_Uc");
    static STRUCT_IF_C BFu17i_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Uc, BFu17i_BFu1ll_Uc)
//============================================================================


struct  BFu17i_BFu1ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu1ll_Ui) C1{ Fi:17 FL:1 Fi}



static void Test_BFu17i_BFu1ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu1ll_Ui");
    static STRUCT_IF_C BFu17i_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Ui, BFu17i_BFu1ll_Ui)
//============================================================================


struct  BFu17i_BFu1ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu1ll_Ul) C1{ Fi:17 FL:1 FL}



static void Test_BFu17i_BFu1ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu1ll_Ul");
    static STRUCT_IF_C BFu17i_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Ul, BFu17i_BFu1ll_Ul)
//============================================================================


struct  BFu17i_BFu1ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu1ll_Us) C1{ Fi:17 FL:1 Fs}



static void Test_BFu17i_BFu1ll_Us()
{
  {
    init_simple_test("BFu17i_BFu1ll_Us");
    static STRUCT_IF_C BFu17i_BFu1ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Us, BFu17i_BFu1ll_Us)
//============================================================================


struct  BFu17i_BFu1ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu17i_BFu1ll_Vp) C1{ Fi:17 FL:1 Fp}



static void Test_BFu17i_BFu1ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu1ll_Vp");
    static STRUCT_IF_C BFu17i_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1ll_Vp, BFu17i_BFu1ll_Vp)
//============================================================================


struct  BFu17i_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu17i_BFu1s) C1{ Fi:17 Fs:1}



static void Test_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s, BFu17i_BFu1s)
//============================================================================


struct  BFu17i_BFu1s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu1s_BFu15i) C1{ Fi:17 Fs:1 Fi:15}



static void Test_BFu17i_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu15i, BFu17i_BFu1s_BFu15i)
//============================================================================


struct  BFu17i_BFu1s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu1s_BFu15ll) C1{ Fi:17 Fs:1 FL:15}



static void Test_BFu17i_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu15ll, BFu17i_BFu1s_BFu15ll)
//============================================================================


struct  BFu17i_BFu1s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu1s_BFu15s) C1{ Fi:17 Fs:1 Fs:15}



static void Test_BFu17i_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu15s, BFu17i_BFu1s_BFu15s)
//============================================================================


struct  BFu17i_BFu1s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu1s_BFu16i) C1{ Fi:17 Fs:1 Fi:16}



static void Test_BFu17i_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu16i, BFu17i_BFu1s_BFu16i)
//============================================================================


struct  BFu17i_BFu1s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu1s_BFu16ll) C1{ Fi:17 Fs:1 FL:16}



static void Test_BFu17i_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu16ll, BFu17i_BFu1s_BFu16ll)
//============================================================================


struct  BFu17i_BFu1s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu1s_BFu16s) C1{ Fi:17 Fs:1 Fs:16}



static void Test_BFu17i_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu16s, BFu17i_BFu1s_BFu16s)
//============================================================================


struct  BFu17i_BFu1s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu1s_BFu17i) C1{ Fi:17 Fs:1 Fi:17}



static void Test_BFu17i_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu17i, BFu17i_BFu1s_BFu17i)
//============================================================================


struct  BFu17i_BFu1s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu1s_BFu17ll) C1{ Fi:17 Fs:1 FL:17}



static void Test_BFu17i_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu17ll, BFu17i_BFu1s_BFu17ll)
//============================================================================


struct  BFu17i_BFu1s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu1s_BFu1c) C1{ Fi:17 Fs:1 Fc:1}



static void Test_BFu17i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu1c, BFu17i_BFu1s_BFu1c)
//============================================================================


struct  BFu17i_BFu1s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu1s_BFu1i) C1{ Fi:17 Fs:1 Fi:1}



static void Test_BFu17i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu1i, BFu17i_BFu1s_BFu1i)
//============================================================================


struct  BFu17i_BFu1s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu1s_BFu1ll) C1{ Fi:17 Fs:1 FL:1}



static void Test_BFu17i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu1ll, BFu17i_BFu1s_BFu1ll)
//============================================================================


struct  BFu17i_BFu1s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu1s_BFu1s) C1{ Fi:17 Fs:1 Fs:1}



static void Test_BFu17i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu1s, BFu17i_BFu1s_BFu1s)
//============================================================================


struct  BFu17i_BFu1s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu1s_BFu31i) C1{ Fi:17 Fs:1 Fi:31}



static void Test_BFu17i_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu31i, BFu17i_BFu1s_BFu31i)
//============================================================================


struct  BFu17i_BFu1s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu1s_BFu31ll) C1{ Fi:17 Fs:1 FL:31}



static void Test_BFu17i_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu31ll, BFu17i_BFu1s_BFu31ll)
//============================================================================


struct  BFu17i_BFu1s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu1s_BFu32i) C1{ Fi:17 Fs:1 Fi:32}



static void Test_BFu17i_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu32i, BFu17i_BFu1s_BFu32i)
//============================================================================


struct  BFu17i_BFu1s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu1s_BFu32ll) C1{ Fi:17 Fs:1 FL:32}



static void Test_BFu17i_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu32ll, BFu17i_BFu1s_BFu32ll)
//============================================================================


struct  BFu17i_BFu1s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu1s_BFu33) C1{ Fi:17 Fs:1 FL:33}



static void Test_BFu17i_BFu1s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu33");
    static STRUCT_IF_C BFu17i_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu33, BFu17i_BFu1s_BFu33)
//============================================================================


struct  BFu17i_BFu1s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu1s_BFu7c) C1{ Fi:17 Fs:1 Fc:7}



static void Test_BFu17i_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu1s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu7c, BFu17i_BFu1s_BFu7c)
//============================================================================


struct  BFu17i_BFu1s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu1s_BFu7i) C1{ Fi:17 Fs:1 Fi:7}



static void Test_BFu17i_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu7i, BFu17i_BFu1s_BFu7i)
//============================================================================


struct  BFu17i_BFu1s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu1s_BFu7ll) C1{ Fi:17 Fs:1 FL:7}



static void Test_BFu17i_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu7ll, BFu17i_BFu1s_BFu7ll)
//============================================================================


struct  BFu17i_BFu1s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu1s_BFu7s) C1{ Fi:17 Fs:1 Fs:7}



static void Test_BFu17i_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu7s, BFu17i_BFu1s_BFu7s)
//============================================================================


struct  BFu17i_BFu1s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu1s_BFu8c) C1{ Fi:17 Fs:1 Fc:8}



static void Test_BFu17i_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu8c, BFu17i_BFu1s_BFu8c)
//============================================================================


struct  BFu17i_BFu1s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu1s_BFu8i) C1{ Fi:17 Fs:1 Fi:8}



static void Test_BFu17i_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu8i, BFu17i_BFu1s_BFu8i)
//============================================================================


struct  BFu17i_BFu1s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu1s_BFu8ll) C1{ Fi:17 Fs:1 FL:8}



static void Test_BFu17i_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu8ll, BFu17i_BFu1s_BFu8ll)
//============================================================================


struct  BFu17i_BFu1s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu1s_BFu8s) C1{ Fi:17 Fs:1 Fs:8}



static void Test_BFu17i_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu8s, BFu17i_BFu1s_BFu8s)
//============================================================================


struct  BFu17i_BFu1s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu1s_BFu9i) C1{ Fi:17 Fs:1 Fi:9}



static void Test_BFu17i_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu9i, BFu17i_BFu1s_BFu9i)
//============================================================================


struct  BFu17i_BFu1s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu1s_BFu9ll) C1{ Fi:17 Fs:1 FL:9}



static void Test_BFu17i_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu9ll, BFu17i_BFu1s_BFu9ll)
//============================================================================


struct  BFu17i_BFu1s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu1s_BFu9s) C1{ Fi:17 Fs:1 Fs:9}



static void Test_BFu17i_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu1s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_BFu9s, BFu17i_BFu1s_BFu9s)
//============================================================================


struct  BFu17i_BFu1s_C  {
  unsigned int v1:17;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu17i_BFu1s_C) C1{ Fi:17 Fs:1 Fc}



static void Test_BFu17i_BFu1s_C()
{
  {
    init_simple_test("BFu17i_BFu1s_C");
    static STRUCT_IF_C BFu17i_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_C, BFu17i_BFu1s_C)
//============================================================================


struct  BFu17i_BFu1s_D  {
  unsigned int v1:17;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu17i_BFu1s_D) C1{ Fi:17 Fs:1 FL}



static void Test_BFu17i_BFu1s_D()
{
  {
    init_simple_test("BFu17i_BFu1s_D");
    static STRUCT_IF_C BFu17i_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_D, BFu17i_BFu1s_D)
//============================================================================


struct  BFu17i_BFu1s_F  {
  unsigned int v1:17;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu17i_BFu1s_F) C1{ Fi:17 Fs:1 Fi}



static void Test_BFu17i_BFu1s_F()
{
  {
    init_simple_test("BFu17i_BFu1s_F");
    static STRUCT_IF_C BFu17i_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_F, BFu17i_BFu1s_F)
//============================================================================


struct  BFu17i_BFu1s_I  {
  unsigned int v1:17;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu17i_BFu1s_I) C1{ Fi:17 Fs:1 Fi}



static void Test_BFu17i_BFu1s_I()
{
  {
    init_simple_test("BFu17i_BFu1s_I");
    static STRUCT_IF_C BFu17i_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_I, BFu17i_BFu1s_I)
//============================================================================


struct  BFu17i_BFu1s_Ip  {
  unsigned int v1:17;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu17i_BFu1s_Ip) C1{ Fi:17 Fs:1 Fp}



static void Test_BFu17i_BFu1s_Ip()
{
  {
    init_simple_test("BFu17i_BFu1s_Ip");
    static STRUCT_IF_C BFu17i_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Ip, BFu17i_BFu1s_Ip)
//============================================================================


struct  BFu17i_BFu1s_L  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu1s_L) C1{ Fi:17 Fs:1 FL}



static void Test_BFu17i_BFu1s_L()
{
  {
    init_simple_test("BFu17i_BFu1s_L");
    static STRUCT_IF_C BFu17i_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_L, BFu17i_BFu1s_L)
//============================================================================


struct  BFu17i_BFu1s_S  {
  unsigned int v1:17;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu17i_BFu1s_S) C1{ Fi:17 Fs:1 Fs}



static void Test_BFu17i_BFu1s_S()
{
  {
    init_simple_test("BFu17i_BFu1s_S");
    static STRUCT_IF_C BFu17i_BFu1s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_S, BFu17i_BFu1s_S)
//============================================================================


struct  BFu17i_BFu1s_Uc  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu1s_Uc) C1{ Fi:17 Fs:1 Fc}



static void Test_BFu17i_BFu1s_Uc()
{
  {
    init_simple_test("BFu17i_BFu1s_Uc");
    static STRUCT_IF_C BFu17i_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Uc, BFu17i_BFu1s_Uc)
//============================================================================


struct  BFu17i_BFu1s_Ui  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu1s_Ui) C1{ Fi:17 Fs:1 Fi}



static void Test_BFu17i_BFu1s_Ui()
{
  {
    init_simple_test("BFu17i_BFu1s_Ui");
    static STRUCT_IF_C BFu17i_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Ui, BFu17i_BFu1s_Ui)
//============================================================================


struct  BFu17i_BFu1s_Ul  {
  unsigned int v1:17;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu1s_Ul) C1{ Fi:17 Fs:1 FL}



static void Test_BFu17i_BFu1s_Ul()
{
  {
    init_simple_test("BFu17i_BFu1s_Ul");
    static STRUCT_IF_C BFu17i_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Ul, BFu17i_BFu1s_Ul)
//============================================================================


struct  BFu17i_BFu1s_Us  {
  unsigned int v1:17;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu1s_Us) C1{ Fi:17 Fs:1 Fs}



static void Test_BFu17i_BFu1s_Us()
{
  {
    init_simple_test("BFu17i_BFu1s_Us");
    static STRUCT_IF_C BFu17i_BFu1s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu1s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Us, BFu17i_BFu1s_Us)
//============================================================================


struct  BFu17i_BFu1s_Vp  {
  unsigned int v1:17;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu17i_BFu1s_Vp) C1{ Fi:17 Fs:1 Fp}



static void Test_BFu17i_BFu1s_Vp()
{
  {
    init_simple_test("BFu17i_BFu1s_Vp");
    static STRUCT_IF_C BFu17i_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu1s_Vp, BFu17i_BFu1s_Vp)
//============================================================================


struct  BFu17i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu17i_BFu31i) C1{ Fi:17 Fi:31}



static void Test_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i, BFu17i_BFu31i)
//============================================================================


struct  BFu17i_BFu31i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu31i_BFu15i) C1{ Fi:17 Fi:31 Fi:15}



static void Test_BFu17i_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu15i, BFu17i_BFu31i_BFu15i)
//============================================================================


struct  BFu17i_BFu31i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu31i_BFu15ll) C1{ Fi:17 Fi:31 FL:15}



static void Test_BFu17i_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu17i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu17i_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu15ll, BFu17i_BFu31i_BFu15ll)
//============================================================================


struct  BFu17i_BFu31i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu31i_BFu15s) C1{ Fi:17 Fi:31 Fs:15}



static void Test_BFu17i_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu15s, BFu17i_BFu31i_BFu15s)
//============================================================================


struct  BFu17i_BFu31i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu31i_BFu16i) C1{ Fi:17 Fi:31 Fi:16}



static void Test_BFu17i_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu16i, BFu17i_BFu31i_BFu16i)
//============================================================================


struct  BFu17i_BFu31i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu31i_BFu16ll) C1{ Fi:17 Fi:31 FL:16}



static void Test_BFu17i_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu17i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu17i_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu16ll, BFu17i_BFu31i_BFu16ll)
//============================================================================


struct  BFu17i_BFu31i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu31i_BFu16s) C1{ Fi:17 Fi:31 Fs:16}



static void Test_BFu17i_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu16s, BFu17i_BFu31i_BFu16s)
//============================================================================


struct  BFu17i_BFu31i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu31i_BFu17i) C1{ Fi:17 Fi:31 Fi:17}



static void Test_BFu17i_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu17i, BFu17i_BFu31i_BFu17i)
//============================================================================


struct  BFu17i_BFu31i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu31i_BFu17ll) C1{ Fi:17 Fi:31 FL:17}



static void Test_BFu17i_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu17i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu17ll, BFu17i_BFu31i_BFu17ll)
//============================================================================


struct  BFu17i_BFu31i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu31i_BFu1c) C1{ Fi:17 Fi:31 Fc:1}



static void Test_BFu17i_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17i_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu1c, BFu17i_BFu31i_BFu1c)
//============================================================================


struct  BFu17i_BFu31i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu31i_BFu1i) C1{ Fi:17 Fi:31 Fi:1}



static void Test_BFu17i_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17i_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu1i, BFu17i_BFu31i_BFu1i)
//============================================================================


struct  BFu17i_BFu31i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu31i_BFu1ll) C1{ Fi:17 Fi:31 FL:1}



static void Test_BFu17i_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17i_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu1ll, BFu17i_BFu31i_BFu1ll)
//============================================================================


struct  BFu17i_BFu31i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu31i_BFu1s) C1{ Fi:17 Fi:31 Fs:1}



static void Test_BFu17i_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17i_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu1s, BFu17i_BFu31i_BFu1s)
//============================================================================


struct  BFu17i_BFu31i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu31i_BFu31i) C1{ Fi:17 Fi:31 Fi:31}



static void Test_BFu17i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu31i, BFu17i_BFu31i_BFu31i)
//============================================================================


struct  BFu17i_BFu31i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu31i_BFu31ll) C1{ Fi:17 Fi:31 FL:31}



static void Test_BFu17i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu17i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu31ll, BFu17i_BFu31i_BFu31ll)
//============================================================================


struct  BFu17i_BFu31i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu31i_BFu32i) C1{ Fi:17 Fi:31 Fi:32}



static void Test_BFu17i_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu32i, BFu17i_BFu31i_BFu32i)
//============================================================================


struct  BFu17i_BFu31i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu31i_BFu32ll) C1{ Fi:17 Fi:31 FL:32}



static void Test_BFu17i_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu17i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu17i_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu32ll, BFu17i_BFu31i_BFu32ll)
//============================================================================


struct  BFu17i_BFu31i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu31i_BFu33) C1{ Fi:17 Fi:31 FL:33}



static void Test_BFu17i_BFu31i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu33");
    static STRUCT_IF_C BFu17i_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu17i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu17i_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu33, BFu17i_BFu31i_BFu33)
//============================================================================


struct  BFu17i_BFu31i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu31i_BFu7c) C1{ Fi:17 Fi:31 Fc:7}



static void Test_BFu17i_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu7c, BFu17i_BFu31i_BFu7c)
//============================================================================


struct  BFu17i_BFu31i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu31i_BFu7i) C1{ Fi:17 Fi:31 Fi:7}



static void Test_BFu17i_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu7i, BFu17i_BFu31i_BFu7i)
//============================================================================


struct  BFu17i_BFu31i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu31i_BFu7ll) C1{ Fi:17 Fi:31 FL:7}



static void Test_BFu17i_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu17i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu17i_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu7ll, BFu17i_BFu31i_BFu7ll)
//============================================================================


struct  BFu17i_BFu31i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu31i_BFu7s) C1{ Fi:17 Fi:31 Fs:7}



static void Test_BFu17i_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu7s, BFu17i_BFu31i_BFu7s)
//============================================================================


struct  BFu17i_BFu31i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu31i_BFu8c) C1{ Fi:17 Fi:31 Fc:8}



static void Test_BFu17i_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu8c, BFu17i_BFu31i_BFu8c)
//============================================================================


struct  BFu17i_BFu31i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu31i_BFu8i) C1{ Fi:17 Fi:31 Fi:8}



static void Test_BFu17i_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu8i, BFu17i_BFu31i_BFu8i)
//============================================================================


struct  BFu17i_BFu31i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu31i_BFu8ll) C1{ Fi:17 Fi:31 FL:8}



static void Test_BFu17i_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu17i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu17i_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu8ll, BFu17i_BFu31i_BFu8ll)
//============================================================================


struct  BFu17i_BFu31i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu31i_BFu8s) C1{ Fi:17 Fi:31 Fs:8}



static void Test_BFu17i_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu8s, BFu17i_BFu31i_BFu8s)
//============================================================================


struct  BFu17i_BFu31i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu31i_BFu9i) C1{ Fi:17 Fi:31 Fi:9}



static void Test_BFu17i_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu9i, BFu17i_BFu31i_BFu9i)
//============================================================================


struct  BFu17i_BFu31i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu31i_BFu9ll) C1{ Fi:17 Fi:31 FL:9}



static void Test_BFu17i_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu17i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu17i_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu9ll, BFu17i_BFu31i_BFu9ll)
//============================================================================


struct  BFu17i_BFu31i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu31i_BFu9s) C1{ Fi:17 Fi:31 Fs:9}



static void Test_BFu17i_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu31i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_BFu9s, BFu17i_BFu31i_BFu9s)
//============================================================================


struct  BFu17i_BFu31i_C  {
  unsigned int v1:17;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu17i_BFu31i_C) C1{ Fi:17 Fi:31 Fc}



static void Test_BFu17i_BFu31i_C()
{
  {
    init_simple_test("BFu17i_BFu31i_C");
    static STRUCT_IF_C BFu17i_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_C, BFu17i_BFu31i_C)
//============================================================================


struct  BFu17i_BFu31i_D  {
  unsigned int v1:17;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu17i_BFu31i_D) C1{ Fi:17 Fi:31 FL}



static void Test_BFu17i_BFu31i_D()
{
  {
    init_simple_test("BFu17i_BFu31i_D");
    static STRUCT_IF_C BFu17i_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_D, BFu17i_BFu31i_D)
//============================================================================


struct  BFu17i_BFu31i_F  {
  unsigned int v1:17;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu17i_BFu31i_F) C1{ Fi:17 Fi:31 Fi}



static void Test_BFu17i_BFu31i_F()
{
  {
    init_simple_test("BFu17i_BFu31i_F");
    static STRUCT_IF_C BFu17i_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_F, BFu17i_BFu31i_F)
//============================================================================


struct  BFu17i_BFu31i_I  {
  unsigned int v1:17;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu17i_BFu31i_I) C1{ Fi:17 Fi:31 Fi}



static void Test_BFu17i_BFu31i_I()
{
  {
    init_simple_test("BFu17i_BFu31i_I");
    static STRUCT_IF_C BFu17i_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_I, BFu17i_BFu31i_I)
//============================================================================


struct  BFu17i_BFu31i_Ip  {
  unsigned int v1:17;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu17i_BFu31i_Ip) C1{ Fi:17 Fi:31 Fp}



static void Test_BFu17i_BFu31i_Ip()
{
  {
    init_simple_test("BFu17i_BFu31i_Ip");
    static STRUCT_IF_C BFu17i_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Ip, BFu17i_BFu31i_Ip)
//============================================================================


struct  BFu17i_BFu31i_L  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu31i_L) C1{ Fi:17 Fi:31 FL}



static void Test_BFu17i_BFu31i_L()
{
  {
    init_simple_test("BFu17i_BFu31i_L");
    static STRUCT_IF_C BFu17i_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_L, BFu17i_BFu31i_L)
//============================================================================


struct  BFu17i_BFu31i_S  {
  unsigned int v1:17;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu17i_BFu31i_S) C1{ Fi:17 Fi:31 Fs}



static void Test_BFu17i_BFu31i_S()
{
  {
    init_simple_test("BFu17i_BFu31i_S");
    static STRUCT_IF_C BFu17i_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_S, BFu17i_BFu31i_S)
//============================================================================


struct  BFu17i_BFu31i_Uc  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu31i_Uc) C1{ Fi:17 Fi:31 Fc}



static void Test_BFu17i_BFu31i_Uc()
{
  {
    init_simple_test("BFu17i_BFu31i_Uc");
    static STRUCT_IF_C BFu17i_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Uc, BFu17i_BFu31i_Uc)
//============================================================================


struct  BFu17i_BFu31i_Ui  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu31i_Ui) C1{ Fi:17 Fi:31 Fi}



static void Test_BFu17i_BFu31i_Ui()
{
  {
    init_simple_test("BFu17i_BFu31i_Ui");
    static STRUCT_IF_C BFu17i_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Ui, BFu17i_BFu31i_Ui)
//============================================================================


struct  BFu17i_BFu31i_Ul  {
  unsigned int v1:17;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu31i_Ul) C1{ Fi:17 Fi:31 FL}



static void Test_BFu17i_BFu31i_Ul()
{
  {
    init_simple_test("BFu17i_BFu31i_Ul");
    static STRUCT_IF_C BFu17i_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Ul, BFu17i_BFu31i_Ul)
//============================================================================


struct  BFu17i_BFu31i_Us  {
  unsigned int v1:17;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu31i_Us) C1{ Fi:17 Fi:31 Fs}



static void Test_BFu17i_BFu31i_Us()
{
  {
    init_simple_test("BFu17i_BFu31i_Us");
    static STRUCT_IF_C BFu17i_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Us, BFu17i_BFu31i_Us)
//============================================================================


struct  BFu17i_BFu31i_Vp  {
  unsigned int v1:17;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu17i_BFu31i_Vp) C1{ Fi:17 Fi:31 Fp}



static void Test_BFu17i_BFu31i_Vp()
{
  {
    init_simple_test("BFu17i_BFu31i_Vp");
    static STRUCT_IF_C BFu17i_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31i_Vp, BFu17i_BFu31i_Vp)
//============================================================================


struct  BFu17i_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu17i_BFu31ll) C1{ Fi:17 FL:31}



static void Test_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll, BFu17i_BFu31ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu31ll_BFu15i) C1{ Fi:17 FL:31 Fi:15}



static void Test_BFu17i_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu15i, BFu17i_BFu31ll_BFu15i)
//============================================================================


struct  BFu17i_BFu31ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu31ll_BFu15ll) C1{ Fi:17 FL:31 FL:15}



static void Test_BFu17i_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu15ll, BFu17i_BFu31ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu31ll_BFu15s) C1{ Fi:17 FL:31 Fs:15}



static void Test_BFu17i_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu15s, BFu17i_BFu31ll_BFu15s)
//============================================================================


struct  BFu17i_BFu31ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu31ll_BFu16i) C1{ Fi:17 FL:31 Fi:16}



static void Test_BFu17i_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu16i, BFu17i_BFu31ll_BFu16i)
//============================================================================


struct  BFu17i_BFu31ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu31ll_BFu16ll) C1{ Fi:17 FL:31 FL:16}



static void Test_BFu17i_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu16ll, BFu17i_BFu31ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu31ll_BFu16s) C1{ Fi:17 FL:31 Fs:16}



static void Test_BFu17i_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu16s, BFu17i_BFu31ll_BFu16s)
//============================================================================


struct  BFu17i_BFu31ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu31ll_BFu17i) C1{ Fi:17 FL:31 Fi:17}



static void Test_BFu17i_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu17i, BFu17i_BFu31ll_BFu17i)
//============================================================================


struct  BFu17i_BFu31ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu31ll_BFu17ll) C1{ Fi:17 FL:31 FL:17}



static void Test_BFu17i_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu17ll, BFu17i_BFu31ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu31ll_BFu1c) C1{ Fi:17 FL:31 Fc:1}



static void Test_BFu17i_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu1c, BFu17i_BFu31ll_BFu1c)
//============================================================================


struct  BFu17i_BFu31ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu31ll_BFu1i) C1{ Fi:17 FL:31 Fi:1}



static void Test_BFu17i_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu1i, BFu17i_BFu31ll_BFu1i)
//============================================================================


struct  BFu17i_BFu31ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu31ll_BFu1ll) C1{ Fi:17 FL:31 FL:1}



static void Test_BFu17i_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu1ll, BFu17i_BFu31ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu31ll_BFu1s) C1{ Fi:17 FL:31 Fs:1}



static void Test_BFu17i_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu1s, BFu17i_BFu31ll_BFu1s)
//============================================================================


struct  BFu17i_BFu31ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu31ll_BFu31i) C1{ Fi:17 FL:31 Fi:31}



static void Test_BFu17i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu31i, BFu17i_BFu31ll_BFu31i)
//============================================================================


struct  BFu17i_BFu31ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu31ll_BFu31ll) C1{ Fi:17 FL:31 FL:31}



static void Test_BFu17i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu31ll, BFu17i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu31ll_BFu32i) C1{ Fi:17 FL:31 Fi:32}



static void Test_BFu17i_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu32i, BFu17i_BFu31ll_BFu32i)
//============================================================================


struct  BFu17i_BFu31ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu31ll_BFu32ll) C1{ Fi:17 FL:31 FL:32}



static void Test_BFu17i_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17i_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu32ll, BFu17i_BFu31ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu31ll_BFu33) C1{ Fi:17 FL:31 FL:33}



static void Test_BFu17i_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu33, BFu17i_BFu31ll_BFu33)
//============================================================================


struct  BFu17i_BFu31ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu31ll_BFu7c) C1{ Fi:17 FL:31 Fc:7}



static void Test_BFu17i_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu7c, BFu17i_BFu31ll_BFu7c)
//============================================================================


struct  BFu17i_BFu31ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu31ll_BFu7i) C1{ Fi:17 FL:31 Fi:7}



static void Test_BFu17i_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu7i, BFu17i_BFu31ll_BFu7i)
//============================================================================


struct  BFu17i_BFu31ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu31ll_BFu7ll) C1{ Fi:17 FL:31 FL:7}



static void Test_BFu17i_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu7ll, BFu17i_BFu31ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu31ll_BFu7s) C1{ Fi:17 FL:31 Fs:7}



static void Test_BFu17i_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu7s, BFu17i_BFu31ll_BFu7s)
//============================================================================


struct  BFu17i_BFu31ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu31ll_BFu8c) C1{ Fi:17 FL:31 Fc:8}



static void Test_BFu17i_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu8c, BFu17i_BFu31ll_BFu8c)
//============================================================================


struct  BFu17i_BFu31ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu31ll_BFu8i) C1{ Fi:17 FL:31 Fi:8}



static void Test_BFu17i_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu8i, BFu17i_BFu31ll_BFu8i)
//============================================================================


struct  BFu17i_BFu31ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu31ll_BFu8ll) C1{ Fi:17 FL:31 FL:8}



static void Test_BFu17i_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu8ll, BFu17i_BFu31ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu31ll_BFu8s) C1{ Fi:17 FL:31 Fs:8}



static void Test_BFu17i_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu8s, BFu17i_BFu31ll_BFu8s)
//============================================================================


struct  BFu17i_BFu31ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu31ll_BFu9i) C1{ Fi:17 FL:31 Fi:9}



static void Test_BFu17i_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu9i, BFu17i_BFu31ll_BFu9i)
//============================================================================


struct  BFu17i_BFu31ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu31ll_BFu9ll) C1{ Fi:17 FL:31 FL:9}



static void Test_BFu17i_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu9ll, BFu17i_BFu31ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu31ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu31ll_BFu9s) C1{ Fi:17 FL:31 Fs:9}



static void Test_BFu17i_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_BFu9s, BFu17i_BFu31ll_BFu9s)
//============================================================================


struct  BFu17i_BFu31ll_C  {
  unsigned int v1:17;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu17i_BFu31ll_C) C1{ Fi:17 FL:31 Fc}



static void Test_BFu17i_BFu31ll_C()
{
  {
    init_simple_test("BFu17i_BFu31ll_C");
    static STRUCT_IF_C BFu17i_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_C");
    check_field_offset(lv, v3, 6, "BFu17i_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_C, BFu17i_BFu31ll_C)
//============================================================================


struct  BFu17i_BFu31ll_D  {
  unsigned int v1:17;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu17i_BFu31ll_D) C1{ Fi:17 FL:31 FL}



static void Test_BFu17i_BFu31ll_D()
{
  {
    init_simple_test("BFu17i_BFu31ll_D");
    static STRUCT_IF_C BFu17i_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_D, BFu17i_BFu31ll_D)
//============================================================================


struct  BFu17i_BFu31ll_F  {
  unsigned int v1:17;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu17i_BFu31ll_F) C1{ Fi:17 FL:31 Fi}



static void Test_BFu17i_BFu31ll_F()
{
  {
    init_simple_test("BFu17i_BFu31ll_F");
    static STRUCT_IF_C BFu17i_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_F, BFu17i_BFu31ll_F)
//============================================================================


struct  BFu17i_BFu31ll_I  {
  unsigned int v1:17;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu17i_BFu31ll_I) C1{ Fi:17 FL:31 Fi}



static void Test_BFu17i_BFu31ll_I()
{
  {
    init_simple_test("BFu17i_BFu31ll_I");
    static STRUCT_IF_C BFu17i_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_I, BFu17i_BFu31ll_I)
//============================================================================


struct  BFu17i_BFu31ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu17i_BFu31ll_Ip) C1{ Fi:17 FL:31 Fp}



static void Test_BFu17i_BFu31ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu31ll_Ip");
    static STRUCT_IF_C BFu17i_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Ip, BFu17i_BFu31ll_Ip)
//============================================================================


struct  BFu17i_BFu31ll_L  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu31ll_L) C1{ Fi:17 FL:31 FL}



static void Test_BFu17i_BFu31ll_L()
{
  {
    init_simple_test("BFu17i_BFu31ll_L");
    static STRUCT_IF_C BFu17i_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_L, BFu17i_BFu31ll_L)
//============================================================================


struct  BFu17i_BFu31ll_S  {
  unsigned int v1:17;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu17i_BFu31ll_S) C1{ Fi:17 FL:31 Fs}



static void Test_BFu17i_BFu31ll_S()
{
  {
    init_simple_test("BFu17i_BFu31ll_S");
    static STRUCT_IF_C BFu17i_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu17i_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_S, BFu17i_BFu31ll_S)
//============================================================================


struct  BFu17i_BFu31ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu31ll_Uc) C1{ Fi:17 FL:31 Fc}



static void Test_BFu17i_BFu31ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu31ll_Uc");
    static STRUCT_IF_C BFu17i_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Uc");
    check_field_offset(lv, v3, 6, "BFu17i_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Uc, BFu17i_BFu31ll_Uc)
//============================================================================


struct  BFu17i_BFu31ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu31ll_Ui) C1{ Fi:17 FL:31 Fi}



static void Test_BFu17i_BFu31ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu31ll_Ui");
    static STRUCT_IF_C BFu17i_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Ui, BFu17i_BFu31ll_Ui)
//============================================================================


struct  BFu17i_BFu31ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu31ll_Ul) C1{ Fi:17 FL:31 FL}



static void Test_BFu17i_BFu31ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu31ll_Ul");
    static STRUCT_IF_C BFu17i_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Ul, BFu17i_BFu31ll_Ul)
//============================================================================


struct  BFu17i_BFu31ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu31ll_Us) C1{ Fi:17 FL:31 Fs}



static void Test_BFu17i_BFu31ll_Us()
{
  {
    init_simple_test("BFu17i_BFu31ll_Us");
    static STRUCT_IF_C BFu17i_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu17i_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Us, BFu17i_BFu31ll_Us)
//============================================================================


struct  BFu17i_BFu31ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu17i_BFu31ll_Vp) C1{ Fi:17 FL:31 Fp}



static void Test_BFu17i_BFu31ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu31ll_Vp");
    static STRUCT_IF_C BFu17i_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu31ll_Vp, BFu17i_BFu31ll_Vp)
//============================================================================


struct  BFu17i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu17i_BFu32i) C1{ Fi:17 Fi:32}



static void Test_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i, BFu17i_BFu32i)
//============================================================================


struct  BFu17i_BFu32i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu32i_BFu15i) C1{ Fi:17 Fi:32 Fi:15}



static void Test_BFu17i_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu15i, BFu17i_BFu32i_BFu15i)
//============================================================================


struct  BFu17i_BFu32i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu32i_BFu15ll) C1{ Fi:17 Fi:32 FL:15}



static void Test_BFu17i_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu15ll, BFu17i_BFu32i_BFu15ll)
//============================================================================


struct  BFu17i_BFu32i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu32i_BFu15s) C1{ Fi:17 Fi:32 Fs:15}



static void Test_BFu17i_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu15s, BFu17i_BFu32i_BFu15s)
//============================================================================


struct  BFu17i_BFu32i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu32i_BFu16i) C1{ Fi:17 Fi:32 Fi:16}



static void Test_BFu17i_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu16i, BFu17i_BFu32i_BFu16i)
//============================================================================


struct  BFu17i_BFu32i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu32i_BFu16ll) C1{ Fi:17 Fi:32 FL:16}



static void Test_BFu17i_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu16ll, BFu17i_BFu32i_BFu16ll)
//============================================================================


struct  BFu17i_BFu32i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu32i_BFu16s) C1{ Fi:17 Fi:32 Fs:16}



static void Test_BFu17i_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu16s, BFu17i_BFu32i_BFu16s)
//============================================================================


struct  BFu17i_BFu32i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu32i_BFu17i) C1{ Fi:17 Fi:32 Fi:17}



static void Test_BFu17i_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu17i, BFu17i_BFu32i_BFu17i)
//============================================================================


struct  BFu17i_BFu32i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu32i_BFu17ll) C1{ Fi:17 Fi:32 FL:17}



static void Test_BFu17i_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu17ll, BFu17i_BFu32i_BFu17ll)
//============================================================================


struct  BFu17i_BFu32i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu32i_BFu1c) C1{ Fi:17 Fi:32 Fc:1}



static void Test_BFu17i_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu1c, BFu17i_BFu32i_BFu1c)
//============================================================================


struct  BFu17i_BFu32i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu32i_BFu1i) C1{ Fi:17 Fi:32 Fi:1}



static void Test_BFu17i_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu1i, BFu17i_BFu32i_BFu1i)
//============================================================================


struct  BFu17i_BFu32i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu32i_BFu1ll) C1{ Fi:17 Fi:32 FL:1}



static void Test_BFu17i_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu1ll, BFu17i_BFu32i_BFu1ll)
//============================================================================


struct  BFu17i_BFu32i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu32i_BFu1s) C1{ Fi:17 Fi:32 Fs:1}



static void Test_BFu17i_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu1s, BFu17i_BFu32i_BFu1s)
//============================================================================


struct  BFu17i_BFu32i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu32i_BFu31i) C1{ Fi:17 Fi:32 Fi:31}



static void Test_BFu17i_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu31i, BFu17i_BFu32i_BFu31i)
//============================================================================


struct  BFu17i_BFu32i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu32i_BFu31ll) C1{ Fi:17 Fi:32 FL:31}



static void Test_BFu17i_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu31ll, BFu17i_BFu32i_BFu31ll)
//============================================================================


struct  BFu17i_BFu32i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu32i_BFu32i) C1{ Fi:17 Fi:32 Fi:32}



static void Test_BFu17i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu32i, BFu17i_BFu32i_BFu32i)
//============================================================================


struct  BFu17i_BFu32i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu32i_BFu32ll) C1{ Fi:17 Fi:32 FL:32}



static void Test_BFu17i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu32ll, BFu17i_BFu32i_BFu32ll)
//============================================================================


struct  BFu17i_BFu32i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu32i_BFu33) C1{ Fi:17 Fi:32 FL:33}



static void Test_BFu17i_BFu32i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu33");
    static STRUCT_IF_C BFu17i_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu17i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu17i_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu33, BFu17i_BFu32i_BFu33)
//============================================================================


struct  BFu17i_BFu32i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu32i_BFu7c) C1{ Fi:17 Fi:32 Fc:7}



static void Test_BFu17i_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu7c, BFu17i_BFu32i_BFu7c)
//============================================================================


struct  BFu17i_BFu32i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu32i_BFu7i) C1{ Fi:17 Fi:32 Fi:7}



static void Test_BFu17i_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu7i, BFu17i_BFu32i_BFu7i)
//============================================================================


struct  BFu17i_BFu32i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu32i_BFu7ll) C1{ Fi:17 Fi:32 FL:7}



static void Test_BFu17i_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu7ll, BFu17i_BFu32i_BFu7ll)
//============================================================================


struct  BFu17i_BFu32i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu32i_BFu7s) C1{ Fi:17 Fi:32 Fs:7}



static void Test_BFu17i_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu7s, BFu17i_BFu32i_BFu7s)
//============================================================================


struct  BFu17i_BFu32i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu32i_BFu8c) C1{ Fi:17 Fi:32 Fc:8}



static void Test_BFu17i_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu8c, BFu17i_BFu32i_BFu8c)
//============================================================================


struct  BFu17i_BFu32i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu32i_BFu8i) C1{ Fi:17 Fi:32 Fi:8}



static void Test_BFu17i_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu8i, BFu17i_BFu32i_BFu8i)
//============================================================================


struct  BFu17i_BFu32i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu32i_BFu8ll) C1{ Fi:17 Fi:32 FL:8}



static void Test_BFu17i_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu8ll, BFu17i_BFu32i_BFu8ll)
//============================================================================


struct  BFu17i_BFu32i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu32i_BFu8s) C1{ Fi:17 Fi:32 Fs:8}



static void Test_BFu17i_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu8s, BFu17i_BFu32i_BFu8s)
//============================================================================


struct  BFu17i_BFu32i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu32i_BFu9i) C1{ Fi:17 Fi:32 Fi:9}



static void Test_BFu17i_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu9i, BFu17i_BFu32i_BFu9i)
//============================================================================


struct  BFu17i_BFu32i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu32i_BFu9ll) C1{ Fi:17 Fi:32 FL:9}



static void Test_BFu17i_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu9ll, BFu17i_BFu32i_BFu9ll)
//============================================================================


struct  BFu17i_BFu32i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu32i_BFu9s) C1{ Fi:17 Fi:32 Fs:9}



static void Test_BFu17i_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu32i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_BFu9s, BFu17i_BFu32i_BFu9s)
//============================================================================


struct  BFu17i_BFu32i_C  {
  unsigned int v1:17;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu17i_BFu32i_C) C1{ Fi:17 Fi:32 Fc}



static void Test_BFu17i_BFu32i_C()
{
  {
    init_simple_test("BFu17i_BFu32i_C");
    static STRUCT_IF_C BFu17i_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_C, BFu17i_BFu32i_C)
//============================================================================


struct  BFu17i_BFu32i_D  {
  unsigned int v1:17;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu17i_BFu32i_D) C1{ Fi:17 Fi:32 FL}



static void Test_BFu17i_BFu32i_D()
{
  {
    init_simple_test("BFu17i_BFu32i_D");
    static STRUCT_IF_C BFu17i_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_D, BFu17i_BFu32i_D)
//============================================================================


struct  BFu17i_BFu32i_F  {
  unsigned int v1:17;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu17i_BFu32i_F) C1{ Fi:17 Fi:32 Fi}



static void Test_BFu17i_BFu32i_F()
{
  {
    init_simple_test("BFu17i_BFu32i_F");
    static STRUCT_IF_C BFu17i_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_F, BFu17i_BFu32i_F)
//============================================================================


struct  BFu17i_BFu32i_I  {
  unsigned int v1:17;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu17i_BFu32i_I) C1{ Fi:17 Fi:32 Fi}



static void Test_BFu17i_BFu32i_I()
{
  {
    init_simple_test("BFu17i_BFu32i_I");
    static STRUCT_IF_C BFu17i_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_I, BFu17i_BFu32i_I)
//============================================================================


struct  BFu17i_BFu32i_Ip  {
  unsigned int v1:17;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu17i_BFu32i_Ip) C1{ Fi:17 Fi:32 Fp}



static void Test_BFu17i_BFu32i_Ip()
{
  {
    init_simple_test("BFu17i_BFu32i_Ip");
    static STRUCT_IF_C BFu17i_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Ip, BFu17i_BFu32i_Ip)
//============================================================================


struct  BFu17i_BFu32i_L  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu32i_L) C1{ Fi:17 Fi:32 FL}



static void Test_BFu17i_BFu32i_L()
{
  {
    init_simple_test("BFu17i_BFu32i_L");
    static STRUCT_IF_C BFu17i_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_L, BFu17i_BFu32i_L)
//============================================================================


struct  BFu17i_BFu32i_S  {
  unsigned int v1:17;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu17i_BFu32i_S) C1{ Fi:17 Fi:32 Fs}



static void Test_BFu17i_BFu32i_S()
{
  {
    init_simple_test("BFu17i_BFu32i_S");
    static STRUCT_IF_C BFu17i_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_S, BFu17i_BFu32i_S)
//============================================================================


struct  BFu17i_BFu32i_Uc  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu32i_Uc) C1{ Fi:17 Fi:32 Fc}



static void Test_BFu17i_BFu32i_Uc()
{
  {
    init_simple_test("BFu17i_BFu32i_Uc");
    static STRUCT_IF_C BFu17i_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Uc, BFu17i_BFu32i_Uc)
//============================================================================


struct  BFu17i_BFu32i_Ui  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu32i_Ui) C1{ Fi:17 Fi:32 Fi}



static void Test_BFu17i_BFu32i_Ui()
{
  {
    init_simple_test("BFu17i_BFu32i_Ui");
    static STRUCT_IF_C BFu17i_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Ui, BFu17i_BFu32i_Ui)
//============================================================================


struct  BFu17i_BFu32i_Ul  {
  unsigned int v1:17;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu32i_Ul) C1{ Fi:17 Fi:32 FL}



static void Test_BFu17i_BFu32i_Ul()
{
  {
    init_simple_test("BFu17i_BFu32i_Ul");
    static STRUCT_IF_C BFu17i_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Ul, BFu17i_BFu32i_Ul)
//============================================================================


struct  BFu17i_BFu32i_Us  {
  unsigned int v1:17;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu32i_Us) C1{ Fi:17 Fi:32 Fs}



static void Test_BFu17i_BFu32i_Us()
{
  {
    init_simple_test("BFu17i_BFu32i_Us");
    static STRUCT_IF_C BFu17i_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Us, BFu17i_BFu32i_Us)
//============================================================================


struct  BFu17i_BFu32i_Vp  {
  unsigned int v1:17;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu17i_BFu32i_Vp) C1{ Fi:17 Fi:32 Fp}



static void Test_BFu17i_BFu32i_Vp()
{
  {
    init_simple_test("BFu17i_BFu32i_Vp");
    static STRUCT_IF_C BFu17i_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32i_Vp, BFu17i_BFu32i_Vp)
//============================================================================


struct  BFu17i_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu17i_BFu32ll) C1{ Fi:17 FL:32}



static void Test_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll, BFu17i_BFu32ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu32ll_BFu15i) C1{ Fi:17 FL:32 Fi:15}



static void Test_BFu17i_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu15i, BFu17i_BFu32ll_BFu15i)
//============================================================================


struct  BFu17i_BFu32ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu32ll_BFu15ll) C1{ Fi:17 FL:32 FL:15}



static void Test_BFu17i_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu15ll, BFu17i_BFu32ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu32ll_BFu15s) C1{ Fi:17 FL:32 Fs:15}



static void Test_BFu17i_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu15s, BFu17i_BFu32ll_BFu15s)
//============================================================================


struct  BFu17i_BFu32ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu32ll_BFu16i) C1{ Fi:17 FL:32 Fi:16}



static void Test_BFu17i_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu16i, BFu17i_BFu32ll_BFu16i)
//============================================================================


struct  BFu17i_BFu32ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu32ll_BFu16ll) C1{ Fi:17 FL:32 FL:16}



static void Test_BFu17i_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu17i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu17i_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu16ll, BFu17i_BFu32ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu32ll_BFu16s) C1{ Fi:17 FL:32 Fs:16}



static void Test_BFu17i_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu16s, BFu17i_BFu32ll_BFu16s)
//============================================================================


struct  BFu17i_BFu32ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu32ll_BFu17i) C1{ Fi:17 FL:32 Fi:17}



static void Test_BFu17i_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu17i, BFu17i_BFu32ll_BFu17i)
//============================================================================


struct  BFu17i_BFu32ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu32ll_BFu17ll) C1{ Fi:17 FL:32 FL:17}



static void Test_BFu17i_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu17ll, BFu17i_BFu32ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu32ll_BFu1c) C1{ Fi:17 FL:32 Fc:1}



static void Test_BFu17i_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu1c, BFu17i_BFu32ll_BFu1c)
//============================================================================


struct  BFu17i_BFu32ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu32ll_BFu1i) C1{ Fi:17 FL:32 Fi:1}



static void Test_BFu17i_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu1i, BFu17i_BFu32ll_BFu1i)
//============================================================================


struct  BFu17i_BFu32ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu32ll_BFu1ll) C1{ Fi:17 FL:32 FL:1}



static void Test_BFu17i_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu1ll, BFu17i_BFu32ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu32ll_BFu1s) C1{ Fi:17 FL:32 Fs:1}



static void Test_BFu17i_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17i_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu1s, BFu17i_BFu32ll_BFu1s)
//============================================================================


struct  BFu17i_BFu32ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu32ll_BFu31i) C1{ Fi:17 FL:32 Fi:31}



static void Test_BFu17i_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu31i, BFu17i_BFu32ll_BFu31i)
//============================================================================


struct  BFu17i_BFu32ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu32ll_BFu31ll) C1{ Fi:17 FL:32 FL:31}



static void Test_BFu17i_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu17i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu17i_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu31ll, BFu17i_BFu32ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu32ll_BFu32i) C1{ Fi:17 FL:32 Fi:32}



static void Test_BFu17i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu32i, BFu17i_BFu32ll_BFu32i)
//============================================================================


struct  BFu17i_BFu32ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu32ll_BFu32ll) C1{ Fi:17 FL:32 FL:32}



static void Test_BFu17i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu17i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu32ll, BFu17i_BFu32ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu32ll_BFu33) C1{ Fi:17 FL:32 FL:33}



static void Test_BFu17i_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu17i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17i_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu33, BFu17i_BFu32ll_BFu33)
//============================================================================


struct  BFu17i_BFu32ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu32ll_BFu7c) C1{ Fi:17 FL:32 Fc:7}



static void Test_BFu17i_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu7c, BFu17i_BFu32ll_BFu7c)
//============================================================================


struct  BFu17i_BFu32ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu32ll_BFu7i) C1{ Fi:17 FL:32 Fi:7}



static void Test_BFu17i_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu7i, BFu17i_BFu32ll_BFu7i)
//============================================================================


struct  BFu17i_BFu32ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu32ll_BFu7ll) C1{ Fi:17 FL:32 FL:7}



static void Test_BFu17i_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu7ll, BFu17i_BFu32ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu32ll_BFu7s) C1{ Fi:17 FL:32 Fs:7}



static void Test_BFu17i_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu7s, BFu17i_BFu32ll_BFu7s)
//============================================================================


struct  BFu17i_BFu32ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu32ll_BFu8c) C1{ Fi:17 FL:32 Fc:8}



static void Test_BFu17i_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu8c, BFu17i_BFu32ll_BFu8c)
//============================================================================


struct  BFu17i_BFu32ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu32ll_BFu8i) C1{ Fi:17 FL:32 Fi:8}



static void Test_BFu17i_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu8i, BFu17i_BFu32ll_BFu8i)
//============================================================================


struct  BFu17i_BFu32ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu32ll_BFu8ll) C1{ Fi:17 FL:32 FL:8}



static void Test_BFu17i_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu8ll, BFu17i_BFu32ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu32ll_BFu8s) C1{ Fi:17 FL:32 Fs:8}



static void Test_BFu17i_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu8s, BFu17i_BFu32ll_BFu8s)
//============================================================================


struct  BFu17i_BFu32ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu32ll_BFu9i) C1{ Fi:17 FL:32 Fi:9}



static void Test_BFu17i_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu9i, BFu17i_BFu32ll_BFu9i)
//============================================================================


struct  BFu17i_BFu32ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu32ll_BFu9ll) C1{ Fi:17 FL:32 FL:9}



static void Test_BFu17i_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu9ll, BFu17i_BFu32ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu32ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu32ll_BFu9s) C1{ Fi:17 FL:32 Fs:9}



static void Test_BFu17i_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_BFu9s, BFu17i_BFu32ll_BFu9s)
//============================================================================


struct  BFu17i_BFu32ll_C  {
  unsigned int v1:17;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu17i_BFu32ll_C) C1{ Fi:17 FL:32 Fc}



static void Test_BFu17i_BFu32ll_C()
{
  {
    init_simple_test("BFu17i_BFu32ll_C");
    static STRUCT_IF_C BFu17i_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_C");
    check_field_offset(lv, v3, 7, "BFu17i_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_C, BFu17i_BFu32ll_C)
//============================================================================


struct  BFu17i_BFu32ll_D  {
  unsigned int v1:17;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu17i_BFu32ll_D) C1{ Fi:17 FL:32 FL}



static void Test_BFu17i_BFu32ll_D()
{
  {
    init_simple_test("BFu17i_BFu32ll_D");
    static STRUCT_IF_C BFu17i_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_D, BFu17i_BFu32ll_D)
//============================================================================


struct  BFu17i_BFu32ll_F  {
  unsigned int v1:17;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu17i_BFu32ll_F) C1{ Fi:17 FL:32 Fi}



static void Test_BFu17i_BFu32ll_F()
{
  {
    init_simple_test("BFu17i_BFu32ll_F");
    static STRUCT_IF_C BFu17i_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_F, BFu17i_BFu32ll_F)
//============================================================================


struct  BFu17i_BFu32ll_I  {
  unsigned int v1:17;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu17i_BFu32ll_I) C1{ Fi:17 FL:32 Fi}



static void Test_BFu17i_BFu32ll_I()
{
  {
    init_simple_test("BFu17i_BFu32ll_I");
    static STRUCT_IF_C BFu17i_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_I, BFu17i_BFu32ll_I)
//============================================================================


struct  BFu17i_BFu32ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu17i_BFu32ll_Ip) C1{ Fi:17 FL:32 Fp}



static void Test_BFu17i_BFu32ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu32ll_Ip");
    static STRUCT_IF_C BFu17i_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Ip, BFu17i_BFu32ll_Ip)
//============================================================================


struct  BFu17i_BFu32ll_L  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu32ll_L) C1{ Fi:17 FL:32 FL}



static void Test_BFu17i_BFu32ll_L()
{
  {
    init_simple_test("BFu17i_BFu32ll_L");
    static STRUCT_IF_C BFu17i_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_L, BFu17i_BFu32ll_L)
//============================================================================


struct  BFu17i_BFu32ll_S  {
  unsigned int v1:17;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu17i_BFu32ll_S) C1{ Fi:17 FL:32 Fs}



static void Test_BFu17i_BFu32ll_S()
{
  {
    init_simple_test("BFu17i_BFu32ll_S");
    static STRUCT_IF_C BFu17i_BFu32ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_S");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_S, BFu17i_BFu32ll_S)
//============================================================================


struct  BFu17i_BFu32ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu32ll_Uc) C1{ Fi:17 FL:32 Fc}



static void Test_BFu17i_BFu32ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu32ll_Uc");
    static STRUCT_IF_C BFu17i_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Uc");
    check_field_offset(lv, v3, 7, "BFu17i_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Uc, BFu17i_BFu32ll_Uc)
//============================================================================


struct  BFu17i_BFu32ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu32ll_Ui) C1{ Fi:17 FL:32 Fi}



static void Test_BFu17i_BFu32ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu32ll_Ui");
    static STRUCT_IF_C BFu17i_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Ui, BFu17i_BFu32ll_Ui)
//============================================================================


struct  BFu17i_BFu32ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu32ll_Ul) C1{ Fi:17 FL:32 FL}



static void Test_BFu17i_BFu32ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu32ll_Ul");
    static STRUCT_IF_C BFu17i_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Ul, BFu17i_BFu32ll_Ul)
//============================================================================


struct  BFu17i_BFu32ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu32ll_Us) C1{ Fi:17 FL:32 Fs}



static void Test_BFu17i_BFu32ll_Us()
{
  {
    init_simple_test("BFu17i_BFu32ll_Us");
    static STRUCT_IF_C BFu17i_BFu32ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Us");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Us, BFu17i_BFu32ll_Us)
//============================================================================


struct  BFu17i_BFu32ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu17i_BFu32ll_Vp) C1{ Fi:17 FL:32 Fp}



static void Test_BFu17i_BFu32ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu32ll_Vp");
    static STRUCT_IF_C BFu17i_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu32ll_Vp, BFu17i_BFu32ll_Vp)
//============================================================================


struct  BFu17i_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu17i_BFu33) C1{ Fi:17 FL:33}



static void Test_BFu17i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu33");
    static STRUCT_IF_C BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33, BFu17i_BFu33)
//============================================================================


struct  BFu17i_BFu33_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu33_BFu15i) C1{ Fi:17 FL:33 Fi:15}



static void Test_BFu17i_BFu33_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu15i");
    static STRUCT_IF_C BFu17i_BFu33_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu15i, BFu17i_BFu33_BFu15i)
//============================================================================


struct  BFu17i_BFu33_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu33_BFu15ll) C1{ Fi:17 FL:33 FL:15}



static void Test_BFu17i_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 15, 1, "BFu17i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 15, hide_ull(1LL<<14), "BFu17i_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu15ll, BFu17i_BFu33_BFu15ll)
//============================================================================


struct  BFu17i_BFu33_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu33_BFu15s) C1{ Fi:17 FL:33 Fs:15}



static void Test_BFu17i_BFu33_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu15s");
    static STRUCT_IF_C BFu17i_BFu33_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu15s, BFu17i_BFu33_BFu15s)
//============================================================================


struct  BFu17i_BFu33_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu33_BFu16i) C1{ Fi:17 FL:33 Fi:16}



static void Test_BFu17i_BFu33_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu16i");
    static STRUCT_IF_C BFu17i_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu16i, BFu17i_BFu33_BFu16i)
//============================================================================


struct  BFu17i_BFu33_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu33_BFu16ll) C1{ Fi:17 FL:33 FL:16}



static void Test_BFu17i_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 16, 1, "BFu17i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 16, hide_ull(1LL<<15), "BFu17i_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu16ll, BFu17i_BFu33_BFu16ll)
//============================================================================


struct  BFu17i_BFu33_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu33_BFu16s) C1{ Fi:17 FL:33 Fs:16}



static void Test_BFu17i_BFu33_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu16s");
    static STRUCT_IF_C BFu17i_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu16s, BFu17i_BFu33_BFu16s)
//============================================================================


struct  BFu17i_BFu33_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu33_BFu17i) C1{ Fi:17 FL:33 Fi:17}



static void Test_BFu17i_BFu33_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu17i");
    static STRUCT_IF_C BFu17i_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu17i, BFu17i_BFu33_BFu17i)
//============================================================================


struct  BFu17i_BFu33_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu33_BFu17ll) C1{ Fi:17 FL:33 FL:17}



static void Test_BFu17i_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 17, 1, "BFu17i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu17ll, BFu17i_BFu33_BFu17ll)
//============================================================================


struct  BFu17i_BFu33_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu33_BFu1c) C1{ Fi:17 FL:33 Fc:1}



static void Test_BFu17i_BFu33_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu33_BFu1c");
    static STRUCT_IF_C BFu17i_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17i_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu1c, BFu17i_BFu33_BFu1c)
//============================================================================


struct  BFu17i_BFu33_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu33_BFu1i) C1{ Fi:17 FL:33 Fi:1}



static void Test_BFu17i_BFu33_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu1i");
    static STRUCT_IF_C BFu17i_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17i_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu1i, BFu17i_BFu33_BFu1i)
//============================================================================


struct  BFu17i_BFu33_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu33_BFu1ll) C1{ Fi:17 FL:33 FL:1}



static void Test_BFu17i_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17i_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu1ll, BFu17i_BFu33_BFu1ll)
//============================================================================


struct  BFu17i_BFu33_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu33_BFu1s) C1{ Fi:17 FL:33 Fs:1}



static void Test_BFu17i_BFu33_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu1s");
    static STRUCT_IF_C BFu17i_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17i_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu1s, BFu17i_BFu33_BFu1s)
//============================================================================


struct  BFu17i_BFu33_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu33_BFu31i) C1{ Fi:17 FL:33 Fi:31}



static void Test_BFu17i_BFu33_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu31i");
    static STRUCT_IF_C BFu17i_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu31i, BFu17i_BFu33_BFu31i)
//============================================================================


struct  BFu17i_BFu33_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu33_BFu31ll) C1{ Fi:17 FL:33 FL:31}



static void Test_BFu17i_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 31, 1, "BFu17i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 31, hide_ull(1LL<<30), "BFu17i_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu31ll, BFu17i_BFu33_BFu31ll)
//============================================================================


struct  BFu17i_BFu33_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu33_BFu32i) C1{ Fi:17 FL:33 Fi:32}



static void Test_BFu17i_BFu33_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu32i");
    static STRUCT_IF_C BFu17i_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu32i, BFu17i_BFu33_BFu32i)
//============================================================================


struct  BFu17i_BFu33_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu33_BFu32ll) C1{ Fi:17 FL:33 FL:32}



static void Test_BFu17i_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 32, 1, "BFu17i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 32, hide_ull(1LL<<31), "BFu17i_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu32ll, BFu17i_BFu33_BFu32ll)
//============================================================================


struct  BFu17i_BFu33_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu33_BFu33) C1{ Fi:17 FL:33 FL:33}



static void Test_BFu17i_BFu33_BFu33()
{
  {
    init_simple_test("BFu17i_BFu33_BFu33");
    static STRUCT_IF_C BFu17i_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 33, 1, "BFu17i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu33, BFu17i_BFu33_BFu33)
//============================================================================


struct  BFu17i_BFu33_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu33_BFu7c) C1{ Fi:17 FL:33 Fc:7}



static void Test_BFu17i_BFu33_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu33_BFu7c");
    static STRUCT_IF_C BFu17i_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 7, 0, 7, 1, "BFu17i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 7, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu7c, BFu17i_BFu33_BFu7c)
//============================================================================


struct  BFu17i_BFu33_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu33_BFu7i) C1{ Fi:17 FL:33 Fi:7}



static void Test_BFu17i_BFu33_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu7i");
    static STRUCT_IF_C BFu17i_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu7i, BFu17i_BFu33_BFu7i)
//============================================================================


struct  BFu17i_BFu33_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu33_BFu7ll) C1{ Fi:17 FL:33 FL:7}



static void Test_BFu17i_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu7ll, BFu17i_BFu33_BFu7ll)
//============================================================================


struct  BFu17i_BFu33_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu33_BFu7s) C1{ Fi:17 FL:33 Fs:7}



static void Test_BFu17i_BFu33_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu7s");
    static STRUCT_IF_C BFu17i_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu7s, BFu17i_BFu33_BFu7s)
//============================================================================


struct  BFu17i_BFu33_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu33_BFu8c) C1{ Fi:17 FL:33 Fc:8}



static void Test_BFu17i_BFu33_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu33_BFu8c");
    static STRUCT_IF_C BFu17i_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu8c, BFu17i_BFu33_BFu8c)
//============================================================================


struct  BFu17i_BFu33_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu33_BFu8i) C1{ Fi:17 FL:33 Fi:8}



static void Test_BFu17i_BFu33_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu8i");
    static STRUCT_IF_C BFu17i_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu8i, BFu17i_BFu33_BFu8i)
//============================================================================


struct  BFu17i_BFu33_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu33_BFu8ll) C1{ Fi:17 FL:33 FL:8}



static void Test_BFu17i_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu8ll, BFu17i_BFu33_BFu8ll)
//============================================================================


struct  BFu17i_BFu33_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu33_BFu8s) C1{ Fi:17 FL:33 Fs:8}



static void Test_BFu17i_BFu33_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu8s");
    static STRUCT_IF_C BFu17i_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu8s, BFu17i_BFu33_BFu8s)
//============================================================================


struct  BFu17i_BFu33_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu33_BFu9i) C1{ Fi:17 FL:33 Fi:9}



static void Test_BFu17i_BFu33_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu33_BFu9i");
    static STRUCT_IF_C BFu17i_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu9i, BFu17i_BFu33_BFu9i)
//============================================================================


struct  BFu17i_BFu33_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu33_BFu9ll) C1{ Fi:17 FL:33 FL:9}



static void Test_BFu17i_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu33_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu9ll, BFu17i_BFu33_BFu9ll)
//============================================================================


struct  BFu17i_BFu33_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu33_BFu9s) C1{ Fi:17 FL:33 Fs:9}



static void Test_BFu17i_BFu33_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu33_BFu9s");
    static STRUCT_IF_C BFu17i_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_BFu9s, BFu17i_BFu33_BFu9s)
//============================================================================


struct  BFu17i_BFu33_C  {
  unsigned int v1:17;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu17i_BFu33_C) C1{ Fi:17 FL:33 Fc}



static void Test_BFu17i_BFu33_C()
{
  {
    init_simple_test("BFu17i_BFu33_C");
    static STRUCT_IF_C BFu17i_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_C");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_C");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_C");
    check_field_offset(lv, v3, 7, "BFu17i_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_C, BFu17i_BFu33_C)
//============================================================================


struct  BFu17i_BFu33_D  {
  unsigned int v1:17;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu17i_BFu33_D) C1{ Fi:17 FL:33 FL}



static void Test_BFu17i_BFu33_D()
{
  {
    init_simple_test("BFu17i_BFu33_D");
    static STRUCT_IF_C BFu17i_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_D");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_D");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_D, BFu17i_BFu33_D)
//============================================================================


struct  BFu17i_BFu33_F  {
  unsigned int v1:17;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu17i_BFu33_F) C1{ Fi:17 FL:33 Fi}



static void Test_BFu17i_BFu33_F()
{
  {
    init_simple_test("BFu17i_BFu33_F");
    static STRUCT_IF_C BFu17i_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_F");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_F");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_F, BFu17i_BFu33_F)
//============================================================================


struct  BFu17i_BFu33_I  {
  unsigned int v1:17;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu17i_BFu33_I) C1{ Fi:17 FL:33 Fi}



static void Test_BFu17i_BFu33_I()
{
  {
    init_simple_test("BFu17i_BFu33_I");
    static STRUCT_IF_C BFu17i_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_I");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_I");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_I, BFu17i_BFu33_I)
//============================================================================


struct  BFu17i_BFu33_Ip  {
  unsigned int v1:17;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu17i_BFu33_Ip) C1{ Fi:17 FL:33 Fp}



static void Test_BFu17i_BFu33_Ip()
{
  {
    init_simple_test("BFu17i_BFu33_Ip");
    static STRUCT_IF_C BFu17i_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Ip, BFu17i_BFu33_Ip)
//============================================================================


struct  BFu17i_BFu33_L  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu33_L) C1{ Fi:17 FL:33 FL}



static void Test_BFu17i_BFu33_L()
{
  {
    init_simple_test("BFu17i_BFu33_L");
    static STRUCT_IF_C BFu17i_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_L");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_L");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_L, BFu17i_BFu33_L)
//============================================================================


struct  BFu17i_BFu33_S  {
  unsigned int v1:17;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu17i_BFu33_S) C1{ Fi:17 FL:33 Fs}



static void Test_BFu17i_BFu33_S()
{
  {
    init_simple_test("BFu17i_BFu33_S");
    static STRUCT_IF_C BFu17i_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_S");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_S");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_S, BFu17i_BFu33_S)
//============================================================================


struct  BFu17i_BFu33_Uc  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu33_Uc) C1{ Fi:17 FL:33 Fc}



static void Test_BFu17i_BFu33_Uc()
{
  {
    init_simple_test("BFu17i_BFu33_Uc");
    static STRUCT_IF_C BFu17i_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Uc");
    check_field_offset(lv, v3, 7, "BFu17i_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Uc, BFu17i_BFu33_Uc)
//============================================================================


struct  BFu17i_BFu33_Ui  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu33_Ui) C1{ Fi:17 FL:33 Fi}



static void Test_BFu17i_BFu33_Ui()
{
  {
    init_simple_test("BFu17i_BFu33_Ui");
    static STRUCT_IF_C BFu17i_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Ui, BFu17i_BFu33_Ui)
//============================================================================


struct  BFu17i_BFu33_Ul  {
  unsigned int v1:17;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu33_Ul) C1{ Fi:17 FL:33 FL}



static void Test_BFu17i_BFu33_Ul()
{
  {
    init_simple_test("BFu17i_BFu33_Ul");
    static STRUCT_IF_C BFu17i_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Ul, BFu17i_BFu33_Ul)
//============================================================================


struct  BFu17i_BFu33_Us  {
  unsigned int v1:17;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu33_Us) C1{ Fi:17 FL:33 Fs}



static void Test_BFu17i_BFu33_Us()
{
  {
    init_simple_test("BFu17i_BFu33_Us");
    static STRUCT_IF_C BFu17i_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Us, BFu17i_BFu33_Us)
//============================================================================


struct  BFu17i_BFu33_Vp  {
  unsigned int v1:17;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu17i_BFu33_Vp) C1{ Fi:17 FL:33 Fp}



static void Test_BFu17i_BFu33_Vp()
{
  {
    init_simple_test("BFu17i_BFu33_Vp");
    static STRUCT_IF_C BFu17i_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu17i_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu33_Vp, BFu17i_BFu33_Vp)
//============================================================================


struct  BFu17i_BFu7c  {
  unsigned int v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu17i_BFu7c) C1{ Fi:17 Fc:7}



static void Test_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c, BFu17i_BFu7c)
//============================================================================


struct  BFu17i_BFu7c_BFu15i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu7c_BFu15i) C1{ Fi:17 Fc:7 Fi:15}



static void Test_BFu17i_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu15i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu15i, BFu17i_BFu7c_BFu15i)
//============================================================================


struct  BFu17i_BFu7c_BFu15ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu7c_BFu15ll) C1{ Fi:17 Fc:7 FL:15}



static void Test_BFu17i_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu15ll, BFu17i_BFu7c_BFu15ll)
//============================================================================


struct  BFu17i_BFu7c_BFu15s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu7c_BFu15s) C1{ Fi:17 Fc:7 Fs:15}



static void Test_BFu17i_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu15s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu15s, BFu17i_BFu7c_BFu15s)
//============================================================================


struct  BFu17i_BFu7c_BFu16i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu7c_BFu16i) C1{ Fi:17 Fc:7 Fi:16}



static void Test_BFu17i_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu16i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu16i, BFu17i_BFu7c_BFu16i)
//============================================================================


struct  BFu17i_BFu7c_BFu16ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu7c_BFu16ll) C1{ Fi:17 Fc:7 FL:16}



static void Test_BFu17i_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu16ll, BFu17i_BFu7c_BFu16ll)
//============================================================================


struct  BFu17i_BFu7c_BFu16s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu7c_BFu16s) C1{ Fi:17 Fc:7 Fs:16}



static void Test_BFu17i_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu16s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu16s, BFu17i_BFu7c_BFu16s)
//============================================================================


struct  BFu17i_BFu7c_BFu17i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu7c_BFu17i) C1{ Fi:17 Fc:7 Fi:17}



static void Test_BFu17i_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu17i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu17i, BFu17i_BFu7c_BFu17i)
//============================================================================


struct  BFu17i_BFu7c_BFu17ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu7c_BFu17ll) C1{ Fi:17 Fc:7 FL:17}



static void Test_BFu17i_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu17ll, BFu17i_BFu7c_BFu17ll)
//============================================================================


struct  BFu17i_BFu7c_BFu1c  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu7c_BFu1c) C1{ Fi:17 Fc:7 Fc:1}



static void Test_BFu17i_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu1c");
    static STRUCT_IF_C BFu17i_BFu7c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu1c, BFu17i_BFu7c_BFu1c)
//============================================================================


struct  BFu17i_BFu7c_BFu1i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu7c_BFu1i) C1{ Fi:17 Fc:7 Fi:1}



static void Test_BFu17i_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu1i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu1i, BFu17i_BFu7c_BFu1i)
//============================================================================


struct  BFu17i_BFu7c_BFu1ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu7c_BFu1ll) C1{ Fi:17 Fc:7 FL:1}



static void Test_BFu17i_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu1ll, BFu17i_BFu7c_BFu1ll)
//============================================================================


struct  BFu17i_BFu7c_BFu1s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu7c_BFu1s) C1{ Fi:17 Fc:7 Fs:1}



static void Test_BFu17i_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu1s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu1s, BFu17i_BFu7c_BFu1s)
//============================================================================


struct  BFu17i_BFu7c_BFu31i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu7c_BFu31i) C1{ Fi:17 Fc:7 Fi:31}



static void Test_BFu17i_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu31i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu31i, BFu17i_BFu7c_BFu31i)
//============================================================================


struct  BFu17i_BFu7c_BFu31ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu7c_BFu31ll) C1{ Fi:17 Fc:7 FL:31}



static void Test_BFu17i_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu31ll, BFu17i_BFu7c_BFu31ll)
//============================================================================


struct  BFu17i_BFu7c_BFu32i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu7c_BFu32i) C1{ Fi:17 Fc:7 Fi:32}



static void Test_BFu17i_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu32i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu32i, BFu17i_BFu7c_BFu32i)
//============================================================================


struct  BFu17i_BFu7c_BFu32ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu7c_BFu32ll) C1{ Fi:17 Fc:7 FL:32}



static void Test_BFu17i_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu32ll, BFu17i_BFu7c_BFu32ll)
//============================================================================


struct  BFu17i_BFu7c_BFu33  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu7c_BFu33) C1{ Fi:17 Fc:7 FL:33}



static void Test_BFu17i_BFu7c_BFu33()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu33");
    static STRUCT_IF_C BFu17i_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17i_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu33, BFu17i_BFu7c_BFu33)
//============================================================================


struct  BFu17i_BFu7c_BFu7c  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu7c_BFu7c) C1{ Fi:17 Fc:7 Fc:7}



static void Test_BFu17i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu17i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu7c, BFu17i_BFu7c_BFu7c)
//============================================================================


struct  BFu17i_BFu7c_BFu7i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu7c_BFu7i) C1{ Fi:17 Fc:7 Fi:7}



static void Test_BFu17i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu7i, BFu17i_BFu7c_BFu7i)
//============================================================================


struct  BFu17i_BFu7c_BFu7ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu7c_BFu7ll) C1{ Fi:17 Fc:7 FL:7}



static void Test_BFu17i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu7ll, BFu17i_BFu7c_BFu7ll)
//============================================================================


struct  BFu17i_BFu7c_BFu7s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu7c_BFu7s) C1{ Fi:17 Fc:7 Fs:7}



static void Test_BFu17i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu7s, BFu17i_BFu7c_BFu7s)
//============================================================================


struct  BFu17i_BFu7c_BFu8c  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu7c_BFu8c) C1{ Fi:17 Fc:7 Fc:8}



static void Test_BFu17i_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu8c");
    static STRUCT_IF_C BFu17i_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu8c, BFu17i_BFu7c_BFu8c)
//============================================================================


struct  BFu17i_BFu7c_BFu8i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu7c_BFu8i) C1{ Fi:17 Fc:7 Fi:8}



static void Test_BFu17i_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu8i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu8i, BFu17i_BFu7c_BFu8i)
//============================================================================


struct  BFu17i_BFu7c_BFu8ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu7c_BFu8ll) C1{ Fi:17 Fc:7 FL:8}



static void Test_BFu17i_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu8ll, BFu17i_BFu7c_BFu8ll)
//============================================================================


struct  BFu17i_BFu7c_BFu8s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu7c_BFu8s) C1{ Fi:17 Fc:7 Fs:8}



static void Test_BFu17i_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu8s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu8s, BFu17i_BFu7c_BFu8s)
//============================================================================


struct  BFu17i_BFu7c_BFu9i  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu7c_BFu9i) C1{ Fi:17 Fc:7 Fi:9}



static void Test_BFu17i_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu9i");
    static STRUCT_IF_C BFu17i_BFu7c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu9i, BFu17i_BFu7c_BFu9i)
//============================================================================


struct  BFu17i_BFu7c_BFu9ll  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu7c_BFu9ll) C1{ Fi:17 Fc:7 FL:9}



static void Test_BFu17i_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu7c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu9ll, BFu17i_BFu7c_BFu9ll)
//============================================================================


struct  BFu17i_BFu7c_BFu9s  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu7c_BFu9s) C1{ Fi:17 Fc:7 Fs:9}



static void Test_BFu17i_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu7c_BFu9s");
    static STRUCT_IF_C BFu17i_BFu7c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_BFu9s, BFu17i_BFu7c_BFu9s)
//============================================================================


struct  BFu17i_BFu7c_C  {
  unsigned int v1:17;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu17i_BFu7c_C) C1{ Fi:17 Fc:7 Fc}



static void Test_BFu17i_BFu7c_C()
{
  {
    init_simple_test("BFu17i_BFu7c_C");
    static STRUCT_IF_C BFu17i_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_C, BFu17i_BFu7c_C)
//============================================================================


struct  BFu17i_BFu7c_D  {
  unsigned int v1:17;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu17i_BFu7c_D) C1{ Fi:17 Fc:7 FL}



static void Test_BFu17i_BFu7c_D()
{
  {
    init_simple_test("BFu17i_BFu7c_D");
    static STRUCT_IF_C BFu17i_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_D, BFu17i_BFu7c_D)
//============================================================================


struct  BFu17i_BFu7c_F  {
  unsigned int v1:17;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu17i_BFu7c_F) C1{ Fi:17 Fc:7 Fi}



static void Test_BFu17i_BFu7c_F()
{
  {
    init_simple_test("BFu17i_BFu7c_F");
    static STRUCT_IF_C BFu17i_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_F, BFu17i_BFu7c_F)
//============================================================================


struct  BFu17i_BFu7c_I  {
  unsigned int v1:17;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu17i_BFu7c_I) C1{ Fi:17 Fc:7 Fi}



static void Test_BFu17i_BFu7c_I()
{
  {
    init_simple_test("BFu17i_BFu7c_I");
    static STRUCT_IF_C BFu17i_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_I, BFu17i_BFu7c_I)
//============================================================================


struct  BFu17i_BFu7c_Ip  {
  unsigned int v1:17;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu17i_BFu7c_Ip) C1{ Fi:17 Fc:7 Fp}



static void Test_BFu17i_BFu7c_Ip()
{
  {
    init_simple_test("BFu17i_BFu7c_Ip");
    static STRUCT_IF_C BFu17i_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Ip, BFu17i_BFu7c_Ip)
//============================================================================


struct  BFu17i_BFu7c_L  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu7c_L) C1{ Fi:17 Fc:7 FL}



static void Test_BFu17i_BFu7c_L()
{
  {
    init_simple_test("BFu17i_BFu7c_L");
    static STRUCT_IF_C BFu17i_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_L, BFu17i_BFu7c_L)
//============================================================================


struct  BFu17i_BFu7c_S  {
  unsigned int v1:17;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu17i_BFu7c_S) C1{ Fi:17 Fc:7 Fs}



static void Test_BFu17i_BFu7c_S()
{
  {
    init_simple_test("BFu17i_BFu7c_S");
    static STRUCT_IF_C BFu17i_BFu7c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_S, BFu17i_BFu7c_S)
//============================================================================


struct  BFu17i_BFu7c_Uc  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu7c_Uc) C1{ Fi:17 Fc:7 Fc}



static void Test_BFu17i_BFu7c_Uc()
{
  {
    init_simple_test("BFu17i_BFu7c_Uc");
    static STRUCT_IF_C BFu17i_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Uc, BFu17i_BFu7c_Uc)
//============================================================================


struct  BFu17i_BFu7c_Ui  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu7c_Ui) C1{ Fi:17 Fc:7 Fi}



static void Test_BFu17i_BFu7c_Ui()
{
  {
    init_simple_test("BFu17i_BFu7c_Ui");
    static STRUCT_IF_C BFu17i_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Ui, BFu17i_BFu7c_Ui)
//============================================================================


struct  BFu17i_BFu7c_Ul  {
  unsigned int v1:17;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu7c_Ul) C1{ Fi:17 Fc:7 FL}



static void Test_BFu17i_BFu7c_Ul()
{
  {
    init_simple_test("BFu17i_BFu7c_Ul");
    static STRUCT_IF_C BFu17i_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Ul, BFu17i_BFu7c_Ul)
//============================================================================


struct  BFu17i_BFu7c_Us  {
  unsigned int v1:17;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu7c_Us) C1{ Fi:17 Fc:7 Fs}



static void Test_BFu17i_BFu7c_Us()
{
  {
    init_simple_test("BFu17i_BFu7c_Us");
    static STRUCT_IF_C BFu17i_BFu7c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Us, BFu17i_BFu7c_Us)
//============================================================================


struct  BFu17i_BFu7c_Vp  {
  unsigned int v1:17;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu17i_BFu7c_Vp) C1{ Fi:17 Fc:7 Fp}



static void Test_BFu17i_BFu7c_Vp()
{
  {
    init_simple_test("BFu17i_BFu7c_Vp");
    static STRUCT_IF_C BFu17i_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7c_Vp, BFu17i_BFu7c_Vp)
//============================================================================


struct  BFu17i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu17i_BFu7i) C1{ Fi:17 Fi:7}



static void Test_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i, BFu17i_BFu7i)
//============================================================================


struct  BFu17i_BFu7i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu7i_BFu15i) C1{ Fi:17 Fi:7 Fi:15}



static void Test_BFu17i_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu15i, BFu17i_BFu7i_BFu15i)
//============================================================================


struct  BFu17i_BFu7i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu7i_BFu15ll) C1{ Fi:17 Fi:7 FL:15}



static void Test_BFu17i_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu15ll, BFu17i_BFu7i_BFu15ll)
//============================================================================


struct  BFu17i_BFu7i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu7i_BFu15s) C1{ Fi:17 Fi:7 Fs:15}



static void Test_BFu17i_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu15s, BFu17i_BFu7i_BFu15s)
//============================================================================


struct  BFu17i_BFu7i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu7i_BFu16i) C1{ Fi:17 Fi:7 Fi:16}



static void Test_BFu17i_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu16i, BFu17i_BFu7i_BFu16i)
//============================================================================


struct  BFu17i_BFu7i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu7i_BFu16ll) C1{ Fi:17 Fi:7 FL:16}



static void Test_BFu17i_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu16ll, BFu17i_BFu7i_BFu16ll)
//============================================================================


struct  BFu17i_BFu7i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu7i_BFu16s) C1{ Fi:17 Fi:7 Fs:16}



static void Test_BFu17i_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu16s, BFu17i_BFu7i_BFu16s)
//============================================================================


struct  BFu17i_BFu7i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu7i_BFu17i) C1{ Fi:17 Fi:7 Fi:17}



static void Test_BFu17i_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu17i, BFu17i_BFu7i_BFu17i)
//============================================================================


struct  BFu17i_BFu7i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu7i_BFu17ll) C1{ Fi:17 Fi:7 FL:17}



static void Test_BFu17i_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu17ll, BFu17i_BFu7i_BFu17ll)
//============================================================================


struct  BFu17i_BFu7i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu7i_BFu1c) C1{ Fi:17 Fi:7 Fc:1}



static void Test_BFu17i_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu1c, BFu17i_BFu7i_BFu1c)
//============================================================================


struct  BFu17i_BFu7i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu7i_BFu1i) C1{ Fi:17 Fi:7 Fi:1}



static void Test_BFu17i_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu1i, BFu17i_BFu7i_BFu1i)
//============================================================================


struct  BFu17i_BFu7i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu7i_BFu1ll) C1{ Fi:17 Fi:7 FL:1}



static void Test_BFu17i_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu1ll, BFu17i_BFu7i_BFu1ll)
//============================================================================


struct  BFu17i_BFu7i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu7i_BFu1s) C1{ Fi:17 Fi:7 Fs:1}



static void Test_BFu17i_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu1s, BFu17i_BFu7i_BFu1s)
//============================================================================


struct  BFu17i_BFu7i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu7i_BFu31i) C1{ Fi:17 Fi:7 Fi:31}



static void Test_BFu17i_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu31i, BFu17i_BFu7i_BFu31i)
//============================================================================


struct  BFu17i_BFu7i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu7i_BFu31ll) C1{ Fi:17 Fi:7 FL:31}



static void Test_BFu17i_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu31ll, BFu17i_BFu7i_BFu31ll)
//============================================================================


struct  BFu17i_BFu7i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu7i_BFu32i) C1{ Fi:17 Fi:7 Fi:32}



static void Test_BFu17i_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu32i, BFu17i_BFu7i_BFu32i)
//============================================================================


struct  BFu17i_BFu7i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu7i_BFu32ll) C1{ Fi:17 Fi:7 FL:32}



static void Test_BFu17i_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu32ll, BFu17i_BFu7i_BFu32ll)
//============================================================================


struct  BFu17i_BFu7i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu7i_BFu33) C1{ Fi:17 Fi:7 FL:33}



static void Test_BFu17i_BFu7i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu33");
    static STRUCT_IF_C BFu17i_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17i_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu33, BFu17i_BFu7i_BFu33)
//============================================================================


struct  BFu17i_BFu7i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu7i_BFu7c) C1{ Fi:17 Fi:7 Fc:7}



static void Test_BFu17i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu7c, BFu17i_BFu7i_BFu7c)
//============================================================================


struct  BFu17i_BFu7i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu7i_BFu7i) C1{ Fi:17 Fi:7 Fi:7}



static void Test_BFu17i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu7i, BFu17i_BFu7i_BFu7i)
//============================================================================


struct  BFu17i_BFu7i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu7i_BFu7ll) C1{ Fi:17 Fi:7 FL:7}



static void Test_BFu17i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu7ll, BFu17i_BFu7i_BFu7ll)
//============================================================================


struct  BFu17i_BFu7i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu7i_BFu7s) C1{ Fi:17 Fi:7 Fs:7}



static void Test_BFu17i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu7s, BFu17i_BFu7i_BFu7s)
//============================================================================


struct  BFu17i_BFu7i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu7i_BFu8c) C1{ Fi:17 Fi:7 Fc:8}



static void Test_BFu17i_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu8c, BFu17i_BFu7i_BFu8c)
//============================================================================


struct  BFu17i_BFu7i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu7i_BFu8i) C1{ Fi:17 Fi:7 Fi:8}



static void Test_BFu17i_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu8i, BFu17i_BFu7i_BFu8i)
//============================================================================


struct  BFu17i_BFu7i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu7i_BFu8ll) C1{ Fi:17 Fi:7 FL:8}



static void Test_BFu17i_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu8ll, BFu17i_BFu7i_BFu8ll)
//============================================================================


struct  BFu17i_BFu7i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu7i_BFu8s) C1{ Fi:17 Fi:7 Fs:8}



static void Test_BFu17i_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu8s, BFu17i_BFu7i_BFu8s)
//============================================================================


struct  BFu17i_BFu7i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu7i_BFu9i) C1{ Fi:17 Fi:7 Fi:9}



static void Test_BFu17i_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu7i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu9i, BFu17i_BFu7i_BFu9i)
//============================================================================


struct  BFu17i_BFu7i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu7i_BFu9ll) C1{ Fi:17 Fi:7 FL:9}



static void Test_BFu17i_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu7i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu9ll, BFu17i_BFu7i_BFu9ll)
//============================================================================


struct  BFu17i_BFu7i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu7i_BFu9s) C1{ Fi:17 Fi:7 Fs:9}



static void Test_BFu17i_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu7i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu7i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_BFu9s, BFu17i_BFu7i_BFu9s)
//============================================================================


struct  BFu17i_BFu7i_C  {
  unsigned int v1:17;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu17i_BFu7i_C) C1{ Fi:17 Fi:7 Fc}



static void Test_BFu17i_BFu7i_C()
{
  {
    init_simple_test("BFu17i_BFu7i_C");
    static STRUCT_IF_C BFu17i_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_C, BFu17i_BFu7i_C)
//============================================================================


struct  BFu17i_BFu7i_D  {
  unsigned int v1:17;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu17i_BFu7i_D) C1{ Fi:17 Fi:7 FL}



static void Test_BFu17i_BFu7i_D()
{
  {
    init_simple_test("BFu17i_BFu7i_D");
    static STRUCT_IF_C BFu17i_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_D, BFu17i_BFu7i_D)
//============================================================================


struct  BFu17i_BFu7i_F  {
  unsigned int v1:17;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu17i_BFu7i_F) C1{ Fi:17 Fi:7 Fi}



static void Test_BFu17i_BFu7i_F()
{
  {
    init_simple_test("BFu17i_BFu7i_F");
    static STRUCT_IF_C BFu17i_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_F, BFu17i_BFu7i_F)
//============================================================================


struct  BFu17i_BFu7i_I  {
  unsigned int v1:17;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu17i_BFu7i_I) C1{ Fi:17 Fi:7 Fi}



static void Test_BFu17i_BFu7i_I()
{
  {
    init_simple_test("BFu17i_BFu7i_I");
    static STRUCT_IF_C BFu17i_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_I, BFu17i_BFu7i_I)
//============================================================================


struct  BFu17i_BFu7i_Ip  {
  unsigned int v1:17;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu17i_BFu7i_Ip) C1{ Fi:17 Fi:7 Fp}



static void Test_BFu17i_BFu7i_Ip()
{
  {
    init_simple_test("BFu17i_BFu7i_Ip");
    static STRUCT_IF_C BFu17i_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Ip, BFu17i_BFu7i_Ip)
//============================================================================


struct  BFu17i_BFu7i_L  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu7i_L) C1{ Fi:17 Fi:7 FL}



static void Test_BFu17i_BFu7i_L()
{
  {
    init_simple_test("BFu17i_BFu7i_L");
    static STRUCT_IF_C BFu17i_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_L, BFu17i_BFu7i_L)
//============================================================================


struct  BFu17i_BFu7i_S  {
  unsigned int v1:17;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu17i_BFu7i_S) C1{ Fi:17 Fi:7 Fs}



static void Test_BFu17i_BFu7i_S()
{
  {
    init_simple_test("BFu17i_BFu7i_S");
    static STRUCT_IF_C BFu17i_BFu7i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_S, BFu17i_BFu7i_S)
//============================================================================


struct  BFu17i_BFu7i_Uc  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu7i_Uc) C1{ Fi:17 Fi:7 Fc}



static void Test_BFu17i_BFu7i_Uc()
{
  {
    init_simple_test("BFu17i_BFu7i_Uc");
    static STRUCT_IF_C BFu17i_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Uc, BFu17i_BFu7i_Uc)
//============================================================================


struct  BFu17i_BFu7i_Ui  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu7i_Ui) C1{ Fi:17 Fi:7 Fi}



static void Test_BFu17i_BFu7i_Ui()
{
  {
    init_simple_test("BFu17i_BFu7i_Ui");
    static STRUCT_IF_C BFu17i_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Ui, BFu17i_BFu7i_Ui)
//============================================================================


struct  BFu17i_BFu7i_Ul  {
  unsigned int v1:17;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu7i_Ul) C1{ Fi:17 Fi:7 FL}



static void Test_BFu17i_BFu7i_Ul()
{
  {
    init_simple_test("BFu17i_BFu7i_Ul");
    static STRUCT_IF_C BFu17i_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Ul, BFu17i_BFu7i_Ul)
//============================================================================


struct  BFu17i_BFu7i_Us  {
  unsigned int v1:17;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu7i_Us) C1{ Fi:17 Fi:7 Fs}



static void Test_BFu17i_BFu7i_Us()
{
  {
    init_simple_test("BFu17i_BFu7i_Us");
    static STRUCT_IF_C BFu17i_BFu7i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Us, BFu17i_BFu7i_Us)
//============================================================================


struct  BFu17i_BFu7i_Vp  {
  unsigned int v1:17;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu17i_BFu7i_Vp) C1{ Fi:17 Fi:7 Fp}



static void Test_BFu17i_BFu7i_Vp()
{
  {
    init_simple_test("BFu17i_BFu7i_Vp");
    static STRUCT_IF_C BFu17i_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7i_Vp, BFu17i_BFu7i_Vp)
//============================================================================


struct  BFu17i_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu17i_BFu7ll) C1{ Fi:17 FL:7}



static void Test_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll, BFu17i_BFu7ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu7ll_BFu15i) C1{ Fi:17 FL:7 Fi:15}



static void Test_BFu17i_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu15i, BFu17i_BFu7ll_BFu15i)
//============================================================================


struct  BFu17i_BFu7ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu7ll_BFu15ll) C1{ Fi:17 FL:7 FL:15}



static void Test_BFu17i_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu15ll, BFu17i_BFu7ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu7ll_BFu15s) C1{ Fi:17 FL:7 Fs:15}



static void Test_BFu17i_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu15s, BFu17i_BFu7ll_BFu15s)
//============================================================================


struct  BFu17i_BFu7ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu7ll_BFu16i) C1{ Fi:17 FL:7 Fi:16}



static void Test_BFu17i_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu16i, BFu17i_BFu7ll_BFu16i)
//============================================================================


struct  BFu17i_BFu7ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu7ll_BFu16ll) C1{ Fi:17 FL:7 FL:16}



static void Test_BFu17i_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu16ll, BFu17i_BFu7ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu7ll_BFu16s) C1{ Fi:17 FL:7 Fs:16}



static void Test_BFu17i_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu16s, BFu17i_BFu7ll_BFu16s)
//============================================================================


struct  BFu17i_BFu7ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu7ll_BFu17i) C1{ Fi:17 FL:7 Fi:17}



static void Test_BFu17i_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu17i, BFu17i_BFu7ll_BFu17i)
//============================================================================


struct  BFu17i_BFu7ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu7ll_BFu17ll) C1{ Fi:17 FL:7 FL:17}



static void Test_BFu17i_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu17ll, BFu17i_BFu7ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu7ll_BFu1c) C1{ Fi:17 FL:7 Fc:1}



static void Test_BFu17i_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu1c, BFu17i_BFu7ll_BFu1c)
//============================================================================


struct  BFu17i_BFu7ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu7ll_BFu1i) C1{ Fi:17 FL:7 Fi:1}



static void Test_BFu17i_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu1i, BFu17i_BFu7ll_BFu1i)
//============================================================================


struct  BFu17i_BFu7ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu7ll_BFu1ll) C1{ Fi:17 FL:7 FL:1}



static void Test_BFu17i_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu1ll, BFu17i_BFu7ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu7ll_BFu1s) C1{ Fi:17 FL:7 Fs:1}



static void Test_BFu17i_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu1s, BFu17i_BFu7ll_BFu1s)
//============================================================================


struct  BFu17i_BFu7ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu7ll_BFu31i) C1{ Fi:17 FL:7 Fi:31}



static void Test_BFu17i_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu31i, BFu17i_BFu7ll_BFu31i)
//============================================================================


struct  BFu17i_BFu7ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu7ll_BFu31ll) C1{ Fi:17 FL:7 FL:31}



static void Test_BFu17i_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu31ll, BFu17i_BFu7ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu7ll_BFu32i) C1{ Fi:17 FL:7 Fi:32}



static void Test_BFu17i_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu32i, BFu17i_BFu7ll_BFu32i)
//============================================================================


struct  BFu17i_BFu7ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu7ll_BFu32ll) C1{ Fi:17 FL:7 FL:32}



static void Test_BFu17i_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu32ll, BFu17i_BFu7ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu7ll_BFu33) C1{ Fi:17 FL:7 FL:33}



static void Test_BFu17i_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17i_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu33, BFu17i_BFu7ll_BFu33)
//============================================================================


struct  BFu17i_BFu7ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu7ll_BFu7c) C1{ Fi:17 FL:7 Fc:7}



static void Test_BFu17i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu7c, BFu17i_BFu7ll_BFu7c)
//============================================================================


struct  BFu17i_BFu7ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu7ll_BFu7i) C1{ Fi:17 FL:7 Fi:7}



static void Test_BFu17i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu7i, BFu17i_BFu7ll_BFu7i)
//============================================================================


struct  BFu17i_BFu7ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu7ll_BFu7ll) C1{ Fi:17 FL:7 FL:7}



static void Test_BFu17i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu7ll, BFu17i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu7ll_BFu7s) C1{ Fi:17 FL:7 Fs:7}



static void Test_BFu17i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu7s, BFu17i_BFu7ll_BFu7s)
//============================================================================


struct  BFu17i_BFu7ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu7ll_BFu8c) C1{ Fi:17 FL:7 Fc:8}



static void Test_BFu17i_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu8c, BFu17i_BFu7ll_BFu8c)
//============================================================================


struct  BFu17i_BFu7ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu7ll_BFu8i) C1{ Fi:17 FL:7 Fi:8}



static void Test_BFu17i_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu8i, BFu17i_BFu7ll_BFu8i)
//============================================================================


struct  BFu17i_BFu7ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu7ll_BFu8ll) C1{ Fi:17 FL:7 FL:8}



static void Test_BFu17i_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu8ll, BFu17i_BFu7ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu7ll_BFu8s) C1{ Fi:17 FL:7 Fs:8}



static void Test_BFu17i_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu8s, BFu17i_BFu7ll_BFu8s)
//============================================================================


struct  BFu17i_BFu7ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu7ll_BFu9i) C1{ Fi:17 FL:7 Fi:9}



static void Test_BFu17i_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu9i, BFu17i_BFu7ll_BFu9i)
//============================================================================


struct  BFu17i_BFu7ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu7ll_BFu9ll) C1{ Fi:17 FL:7 FL:9}



static void Test_BFu17i_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu9ll, BFu17i_BFu7ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu7ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu7ll_BFu9s) C1{ Fi:17 FL:7 Fs:9}



static void Test_BFu17i_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu7ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_BFu9s, BFu17i_BFu7ll_BFu9s)
//============================================================================


struct  BFu17i_BFu7ll_C  {
  unsigned int v1:17;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu17i_BFu7ll_C) C1{ Fi:17 FL:7 Fc}



static void Test_BFu17i_BFu7ll_C()
{
  {
    init_simple_test("BFu17i_BFu7ll_C");
    static STRUCT_IF_C BFu17i_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_C, BFu17i_BFu7ll_C)
//============================================================================


struct  BFu17i_BFu7ll_D  {
  unsigned int v1:17;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu17i_BFu7ll_D) C1{ Fi:17 FL:7 FL}



static void Test_BFu17i_BFu7ll_D()
{
  {
    init_simple_test("BFu17i_BFu7ll_D");
    static STRUCT_IF_C BFu17i_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_D, BFu17i_BFu7ll_D)
//============================================================================


struct  BFu17i_BFu7ll_F  {
  unsigned int v1:17;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu17i_BFu7ll_F) C1{ Fi:17 FL:7 Fi}



static void Test_BFu17i_BFu7ll_F()
{
  {
    init_simple_test("BFu17i_BFu7ll_F");
    static STRUCT_IF_C BFu17i_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_F, BFu17i_BFu7ll_F)
//============================================================================


struct  BFu17i_BFu7ll_I  {
  unsigned int v1:17;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu17i_BFu7ll_I) C1{ Fi:17 FL:7 Fi}



static void Test_BFu17i_BFu7ll_I()
{
  {
    init_simple_test("BFu17i_BFu7ll_I");
    static STRUCT_IF_C BFu17i_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_I, BFu17i_BFu7ll_I)
//============================================================================


struct  BFu17i_BFu7ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu17i_BFu7ll_Ip) C1{ Fi:17 FL:7 Fp}



static void Test_BFu17i_BFu7ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu7ll_Ip");
    static STRUCT_IF_C BFu17i_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Ip, BFu17i_BFu7ll_Ip)
//============================================================================


struct  BFu17i_BFu7ll_L  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu7ll_L) C1{ Fi:17 FL:7 FL}



static void Test_BFu17i_BFu7ll_L()
{
  {
    init_simple_test("BFu17i_BFu7ll_L");
    static STRUCT_IF_C BFu17i_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_L, BFu17i_BFu7ll_L)
//============================================================================


struct  BFu17i_BFu7ll_S  {
  unsigned int v1:17;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu17i_BFu7ll_S) C1{ Fi:17 FL:7 Fs}



static void Test_BFu17i_BFu7ll_S()
{
  {
    init_simple_test("BFu17i_BFu7ll_S");
    static STRUCT_IF_C BFu17i_BFu7ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_S, BFu17i_BFu7ll_S)
//============================================================================


struct  BFu17i_BFu7ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu7ll_Uc) C1{ Fi:17 FL:7 Fc}



static void Test_BFu17i_BFu7ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu7ll_Uc");
    static STRUCT_IF_C BFu17i_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Uc, BFu17i_BFu7ll_Uc)
//============================================================================


struct  BFu17i_BFu7ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu7ll_Ui) C1{ Fi:17 FL:7 Fi}



static void Test_BFu17i_BFu7ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu7ll_Ui");
    static STRUCT_IF_C BFu17i_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Ui, BFu17i_BFu7ll_Ui)
//============================================================================


struct  BFu17i_BFu7ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu7ll_Ul) C1{ Fi:17 FL:7 FL}



static void Test_BFu17i_BFu7ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu7ll_Ul");
    static STRUCT_IF_C BFu17i_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Ul, BFu17i_BFu7ll_Ul)
//============================================================================


struct  BFu17i_BFu7ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu7ll_Us) C1{ Fi:17 FL:7 Fs}



static void Test_BFu17i_BFu7ll_Us()
{
  {
    init_simple_test("BFu17i_BFu7ll_Us");
    static STRUCT_IF_C BFu17i_BFu7ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Us, BFu17i_BFu7ll_Us)
//============================================================================


struct  BFu17i_BFu7ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu17i_BFu7ll_Vp) C1{ Fi:17 FL:7 Fp}



static void Test_BFu17i_BFu7ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu7ll_Vp");
    static STRUCT_IF_C BFu17i_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7ll_Vp, BFu17i_BFu7ll_Vp)
//============================================================================


struct  BFu17i_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu17i_BFu7s) C1{ Fi:17 Fs:7}



static void Test_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s, BFu17i_BFu7s)
//============================================================================


struct  BFu17i_BFu7s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu7s_BFu15i) C1{ Fi:17 Fs:7 Fi:15}



static void Test_BFu17i_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu15i, BFu17i_BFu7s_BFu15i)
//============================================================================


struct  BFu17i_BFu7s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu7s_BFu15ll) C1{ Fi:17 Fs:7 FL:15}



static void Test_BFu17i_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu15ll, BFu17i_BFu7s_BFu15ll)
//============================================================================


struct  BFu17i_BFu7s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu7s_BFu15s) C1{ Fi:17 Fs:7 Fs:15}



static void Test_BFu17i_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu15s, BFu17i_BFu7s_BFu15s)
//============================================================================


struct  BFu17i_BFu7s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu7s_BFu16i) C1{ Fi:17 Fs:7 Fi:16}



static void Test_BFu17i_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu16i, BFu17i_BFu7s_BFu16i)
//============================================================================


struct  BFu17i_BFu7s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu7s_BFu16ll) C1{ Fi:17 Fs:7 FL:16}



static void Test_BFu17i_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu16ll, BFu17i_BFu7s_BFu16ll)
//============================================================================


struct  BFu17i_BFu7s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu7s_BFu16s) C1{ Fi:17 Fs:7 Fs:16}



static void Test_BFu17i_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu16s, BFu17i_BFu7s_BFu16s)
//============================================================================


struct  BFu17i_BFu7s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu7s_BFu17i) C1{ Fi:17 Fs:7 Fi:17}



static void Test_BFu17i_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu17i, BFu17i_BFu7s_BFu17i)
//============================================================================


struct  BFu17i_BFu7s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu7s_BFu17ll) C1{ Fi:17 Fs:7 FL:17}



static void Test_BFu17i_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu17ll, BFu17i_BFu7s_BFu17ll)
//============================================================================


struct  BFu17i_BFu7s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu7s_BFu1c) C1{ Fi:17 Fs:7 Fc:1}



static void Test_BFu17i_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu7s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu1c, BFu17i_BFu7s_BFu1c)
//============================================================================


struct  BFu17i_BFu7s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu7s_BFu1i) C1{ Fi:17 Fs:7 Fi:1}



static void Test_BFu17i_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu1i, BFu17i_BFu7s_BFu1i)
//============================================================================


struct  BFu17i_BFu7s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu7s_BFu1ll) C1{ Fi:17 Fs:7 FL:1}



static void Test_BFu17i_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu1ll, BFu17i_BFu7s_BFu1ll)
//============================================================================


struct  BFu17i_BFu7s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu7s_BFu1s) C1{ Fi:17 Fs:7 Fs:1}



static void Test_BFu17i_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17i_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu1s, BFu17i_BFu7s_BFu1s)
//============================================================================


struct  BFu17i_BFu7s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu7s_BFu31i) C1{ Fi:17 Fs:7 Fi:31}



static void Test_BFu17i_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu31i, BFu17i_BFu7s_BFu31i)
//============================================================================


struct  BFu17i_BFu7s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu7s_BFu31ll) C1{ Fi:17 Fs:7 FL:31}



static void Test_BFu17i_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu31ll, BFu17i_BFu7s_BFu31ll)
//============================================================================


struct  BFu17i_BFu7s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu7s_BFu32i) C1{ Fi:17 Fs:7 Fi:32}



static void Test_BFu17i_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu32i, BFu17i_BFu7s_BFu32i)
//============================================================================


struct  BFu17i_BFu7s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu7s_BFu32ll) C1{ Fi:17 Fs:7 FL:32}



static void Test_BFu17i_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu32ll, BFu17i_BFu7s_BFu32ll)
//============================================================================


struct  BFu17i_BFu7s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu7s_BFu33) C1{ Fi:17 Fs:7 FL:33}



static void Test_BFu17i_BFu7s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu33");
    static STRUCT_IF_C BFu17i_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17i_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu33, BFu17i_BFu7s_BFu33)
//============================================================================


struct  BFu17i_BFu7s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu7s_BFu7c) C1{ Fi:17 Fs:7 Fc:7}



static void Test_BFu17i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu7c, BFu17i_BFu7s_BFu7c)
//============================================================================


struct  BFu17i_BFu7s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu7s_BFu7i) C1{ Fi:17 Fs:7 Fi:7}



static void Test_BFu17i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu7i, BFu17i_BFu7s_BFu7i)
//============================================================================


struct  BFu17i_BFu7s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu7s_BFu7ll) C1{ Fi:17 Fs:7 FL:7}



static void Test_BFu17i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu7ll, BFu17i_BFu7s_BFu7ll)
//============================================================================


struct  BFu17i_BFu7s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu7s_BFu7s) C1{ Fi:17 Fs:7 Fs:7}



static void Test_BFu17i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu7s, BFu17i_BFu7s_BFu7s)
//============================================================================


struct  BFu17i_BFu7s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu7s_BFu8c) C1{ Fi:17 Fs:7 Fc:8}



static void Test_BFu17i_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu8c, BFu17i_BFu7s_BFu8c)
//============================================================================


struct  BFu17i_BFu7s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu7s_BFu8i) C1{ Fi:17 Fs:7 Fi:8}



static void Test_BFu17i_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu8i, BFu17i_BFu7s_BFu8i)
//============================================================================


struct  BFu17i_BFu7s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu7s_BFu8ll) C1{ Fi:17 Fs:7 FL:8}



static void Test_BFu17i_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu8ll, BFu17i_BFu7s_BFu8ll)
//============================================================================


struct  BFu17i_BFu7s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu7s_BFu8s) C1{ Fi:17 Fs:7 Fs:8}



static void Test_BFu17i_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu8s, BFu17i_BFu7s_BFu8s)
//============================================================================


struct  BFu17i_BFu7s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu7s_BFu9i) C1{ Fi:17 Fs:7 Fi:9}



static void Test_BFu17i_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu7s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu9i, BFu17i_BFu7s_BFu9i)
//============================================================================


struct  BFu17i_BFu7s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu7s_BFu9ll) C1{ Fi:17 Fs:7 FL:9}



static void Test_BFu17i_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu7s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu9ll, BFu17i_BFu7s_BFu9ll)
//============================================================================


struct  BFu17i_BFu7s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu7s_BFu9s) C1{ Fi:17 Fs:7 Fs:9}



static void Test_BFu17i_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu7s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu7s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_BFu9s, BFu17i_BFu7s_BFu9s)
//============================================================================


struct  BFu17i_BFu7s_C  {
  unsigned int v1:17;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu17i_BFu7s_C) C1{ Fi:17 Fs:7 Fc}



static void Test_BFu17i_BFu7s_C()
{
  {
    init_simple_test("BFu17i_BFu7s_C");
    static STRUCT_IF_C BFu17i_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_C");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_C, BFu17i_BFu7s_C)
//============================================================================


struct  BFu17i_BFu7s_D  {
  unsigned int v1:17;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu17i_BFu7s_D) C1{ Fi:17 Fs:7 FL}



static void Test_BFu17i_BFu7s_D()
{
  {
    init_simple_test("BFu17i_BFu7s_D");
    static STRUCT_IF_C BFu17i_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_D, BFu17i_BFu7s_D)
//============================================================================


struct  BFu17i_BFu7s_F  {
  unsigned int v1:17;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu17i_BFu7s_F) C1{ Fi:17 Fs:7 Fi}



static void Test_BFu17i_BFu7s_F()
{
  {
    init_simple_test("BFu17i_BFu7s_F");
    static STRUCT_IF_C BFu17i_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_F, BFu17i_BFu7s_F)
//============================================================================


struct  BFu17i_BFu7s_I  {
  unsigned int v1:17;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu17i_BFu7s_I) C1{ Fi:17 Fs:7 Fi}



static void Test_BFu17i_BFu7s_I()
{
  {
    init_simple_test("BFu17i_BFu7s_I");
    static STRUCT_IF_C BFu17i_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_I, BFu17i_BFu7s_I)
//============================================================================


struct  BFu17i_BFu7s_Ip  {
  unsigned int v1:17;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu17i_BFu7s_Ip) C1{ Fi:17 Fs:7 Fp}



static void Test_BFu17i_BFu7s_Ip()
{
  {
    init_simple_test("BFu17i_BFu7s_Ip");
    static STRUCT_IF_C BFu17i_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Ip, BFu17i_BFu7s_Ip)
//============================================================================


struct  BFu17i_BFu7s_L  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu7s_L) C1{ Fi:17 Fs:7 FL}



static void Test_BFu17i_BFu7s_L()
{
  {
    init_simple_test("BFu17i_BFu7s_L");
    static STRUCT_IF_C BFu17i_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_L, BFu17i_BFu7s_L)
//============================================================================


struct  BFu17i_BFu7s_S  {
  unsigned int v1:17;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu17i_BFu7s_S) C1{ Fi:17 Fs:7 Fs}



static void Test_BFu17i_BFu7s_S()
{
  {
    init_simple_test("BFu17i_BFu7s_S");
    static STRUCT_IF_C BFu17i_BFu7s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_S, BFu17i_BFu7s_S)
//============================================================================


struct  BFu17i_BFu7s_Uc  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu7s_Uc) C1{ Fi:17 Fs:7 Fc}



static void Test_BFu17i_BFu7s_Uc()
{
  {
    init_simple_test("BFu17i_BFu7s_Uc");
    static STRUCT_IF_C BFu17i_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Uc");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Uc, BFu17i_BFu7s_Uc)
//============================================================================


struct  BFu17i_BFu7s_Ui  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu7s_Ui) C1{ Fi:17 Fs:7 Fi}



static void Test_BFu17i_BFu7s_Ui()
{
  {
    init_simple_test("BFu17i_BFu7s_Ui");
    static STRUCT_IF_C BFu17i_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Ui, BFu17i_BFu7s_Ui)
//============================================================================


struct  BFu17i_BFu7s_Ul  {
  unsigned int v1:17;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu7s_Ul) C1{ Fi:17 Fs:7 FL}



static void Test_BFu17i_BFu7s_Ul()
{
  {
    init_simple_test("BFu17i_BFu7s_Ul");
    static STRUCT_IF_C BFu17i_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Ul, BFu17i_BFu7s_Ul)
//============================================================================


struct  BFu17i_BFu7s_Us  {
  unsigned int v1:17;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu7s_Us) C1{ Fi:17 Fs:7 Fs}



static void Test_BFu17i_BFu7s_Us()
{
  {
    init_simple_test("BFu17i_BFu7s_Us");
    static STRUCT_IF_C BFu17i_BFu7s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu7s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Us, BFu17i_BFu7s_Us)
//============================================================================


struct  BFu17i_BFu7s_Vp  {
  unsigned int v1:17;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu17i_BFu7s_Vp) C1{ Fi:17 Fs:7 Fp}



static void Test_BFu17i_BFu7s_Vp()
{
  {
    init_simple_test("BFu17i_BFu7s_Vp");
    static STRUCT_IF_C BFu17i_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu7s_Vp, BFu17i_BFu7s_Vp)
//============================================================================


struct  BFu17i_BFu8c  {
  unsigned int v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu17i_BFu8c) C1{ Fi:17 Fc:8}



static void Test_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c, BFu17i_BFu8c)
//============================================================================


struct  BFu17i_BFu8c_BFu15i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu8c_BFu15i) C1{ Fi:17 Fc:8 Fi:15}



static void Test_BFu17i_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu15i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu15i, BFu17i_BFu8c_BFu15i)
//============================================================================


struct  BFu17i_BFu8c_BFu15ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu8c_BFu15ll) C1{ Fi:17 Fc:8 FL:15}



static void Test_BFu17i_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu15ll, BFu17i_BFu8c_BFu15ll)
//============================================================================


struct  BFu17i_BFu8c_BFu15s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu8c_BFu15s) C1{ Fi:17 Fc:8 Fs:15}



static void Test_BFu17i_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu15s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu15s, BFu17i_BFu8c_BFu15s)
//============================================================================


struct  BFu17i_BFu8c_BFu16i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu8c_BFu16i) C1{ Fi:17 Fc:8 Fi:16}



static void Test_BFu17i_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu16i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu16i, BFu17i_BFu8c_BFu16i)
//============================================================================


struct  BFu17i_BFu8c_BFu16ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu8c_BFu16ll) C1{ Fi:17 Fc:8 FL:16}



static void Test_BFu17i_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu16ll, BFu17i_BFu8c_BFu16ll)
//============================================================================


struct  BFu17i_BFu8c_BFu16s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu8c_BFu16s) C1{ Fi:17 Fc:8 Fs:16}



static void Test_BFu17i_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu16s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu16s, BFu17i_BFu8c_BFu16s)
//============================================================================


struct  BFu17i_BFu8c_BFu17i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu8c_BFu17i) C1{ Fi:17 Fc:8 Fi:17}



static void Test_BFu17i_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu17i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu17i, BFu17i_BFu8c_BFu17i)
//============================================================================


struct  BFu17i_BFu8c_BFu17ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu8c_BFu17ll) C1{ Fi:17 Fc:8 FL:17}



static void Test_BFu17i_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu17ll, BFu17i_BFu8c_BFu17ll)
//============================================================================


struct  BFu17i_BFu8c_BFu1c  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu8c_BFu1c) C1{ Fi:17 Fc:8 Fc:1}



static void Test_BFu17i_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu1c");
    static STRUCT_IF_C BFu17i_BFu8c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu1c, BFu17i_BFu8c_BFu1c)
//============================================================================


struct  BFu17i_BFu8c_BFu1i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu8c_BFu1i) C1{ Fi:17 Fc:8 Fi:1}



static void Test_BFu17i_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu1i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu1i, BFu17i_BFu8c_BFu1i)
//============================================================================


struct  BFu17i_BFu8c_BFu1ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu8c_BFu1ll) C1{ Fi:17 Fc:8 FL:1}



static void Test_BFu17i_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu1ll, BFu17i_BFu8c_BFu1ll)
//============================================================================


struct  BFu17i_BFu8c_BFu1s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu8c_BFu1s) C1{ Fi:17 Fc:8 Fs:1}



static void Test_BFu17i_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu1s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu1s, BFu17i_BFu8c_BFu1s)
//============================================================================


struct  BFu17i_BFu8c_BFu31i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu8c_BFu31i) C1{ Fi:17 Fc:8 Fi:31}



static void Test_BFu17i_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu31i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu31i, BFu17i_BFu8c_BFu31i)
//============================================================================


struct  BFu17i_BFu8c_BFu31ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu8c_BFu31ll) C1{ Fi:17 Fc:8 FL:31}



static void Test_BFu17i_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu31ll, BFu17i_BFu8c_BFu31ll)
//============================================================================


struct  BFu17i_BFu8c_BFu32i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu8c_BFu32i) C1{ Fi:17 Fc:8 Fi:32}



static void Test_BFu17i_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu32i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu32i, BFu17i_BFu8c_BFu32i)
//============================================================================


struct  BFu17i_BFu8c_BFu32ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu8c_BFu32ll) C1{ Fi:17 Fc:8 FL:32}



static void Test_BFu17i_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu32ll, BFu17i_BFu8c_BFu32ll)
//============================================================================


struct  BFu17i_BFu8c_BFu33  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu8c_BFu33) C1{ Fi:17 Fc:8 FL:33}



static void Test_BFu17i_BFu8c_BFu33()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu33");
    static STRUCT_IF_C BFu17i_BFu8c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu33, BFu17i_BFu8c_BFu33)
//============================================================================


struct  BFu17i_BFu8c_BFu7c  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu8c_BFu7c) C1{ Fi:17 Fc:8 Fc:7}



static void Test_BFu17i_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu7c");
    static STRUCT_IF_C BFu17i_BFu8c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu7c, BFu17i_BFu8c_BFu7c)
//============================================================================


struct  BFu17i_BFu8c_BFu7i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu8c_BFu7i) C1{ Fi:17 Fc:8 Fi:7}



static void Test_BFu17i_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu7i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu7i, BFu17i_BFu8c_BFu7i)
//============================================================================


struct  BFu17i_BFu8c_BFu7ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu8c_BFu7ll) C1{ Fi:17 Fc:8 FL:7}



static void Test_BFu17i_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu7ll, BFu17i_BFu8c_BFu7ll)
//============================================================================


struct  BFu17i_BFu8c_BFu7s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu8c_BFu7s) C1{ Fi:17 Fc:8 Fs:7}



static void Test_BFu17i_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu7s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu7s, BFu17i_BFu8c_BFu7s)
//============================================================================


struct  BFu17i_BFu8c_BFu8c  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu8c_BFu8c) C1{ Fi:17 Fc:8 Fc:8}



static void Test_BFu17i_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu8c");
    static STRUCT_IF_C BFu17i_BFu8c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu8c, BFu17i_BFu8c_BFu8c)
//============================================================================


struct  BFu17i_BFu8c_BFu8i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu8c_BFu8i) C1{ Fi:17 Fc:8 Fi:8}



static void Test_BFu17i_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu8i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu8i, BFu17i_BFu8c_BFu8i)
//============================================================================


struct  BFu17i_BFu8c_BFu8ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu8c_BFu8ll) C1{ Fi:17 Fc:8 FL:8}



static void Test_BFu17i_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu8ll, BFu17i_BFu8c_BFu8ll)
//============================================================================


struct  BFu17i_BFu8c_BFu8s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu8c_BFu8s) C1{ Fi:17 Fc:8 Fs:8}



static void Test_BFu17i_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu8s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu8s, BFu17i_BFu8c_BFu8s)
//============================================================================


struct  BFu17i_BFu8c_BFu9i  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu8c_BFu9i) C1{ Fi:17 Fc:8 Fi:9}



static void Test_BFu17i_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu9i");
    static STRUCT_IF_C BFu17i_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu9i, BFu17i_BFu8c_BFu9i)
//============================================================================


struct  BFu17i_BFu8c_BFu9ll  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu8c_BFu9ll) C1{ Fi:17 Fc:8 FL:9}



static void Test_BFu17i_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu9ll, BFu17i_BFu8c_BFu9ll)
//============================================================================


struct  BFu17i_BFu8c_BFu9s  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu8c_BFu9s) C1{ Fi:17 Fc:8 Fs:9}



static void Test_BFu17i_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu8c_BFu9s");
    static STRUCT_IF_C BFu17i_BFu8c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_BFu9s, BFu17i_BFu8c_BFu9s)
//============================================================================


struct  BFu17i_BFu8c_C  {
  unsigned int v1:17;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu17i_BFu8c_C) C1{ Fi:17 Fc:8 Fc}



static void Test_BFu17i_BFu8c_C()
{
  {
    init_simple_test("BFu17i_BFu8c_C");
    static STRUCT_IF_C BFu17i_BFu8c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_C");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_C");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_C, BFu17i_BFu8c_C)
//============================================================================


struct  BFu17i_BFu8c_D  {
  unsigned int v1:17;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu17i_BFu8c_D) C1{ Fi:17 Fc:8 FL}



static void Test_BFu17i_BFu8c_D()
{
  {
    init_simple_test("BFu17i_BFu8c_D");
    static STRUCT_IF_C BFu17i_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_D");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_D");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_D, BFu17i_BFu8c_D)
//============================================================================


struct  BFu17i_BFu8c_F  {
  unsigned int v1:17;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu17i_BFu8c_F) C1{ Fi:17 Fc:8 Fi}



static void Test_BFu17i_BFu8c_F()
{
  {
    init_simple_test("BFu17i_BFu8c_F");
    static STRUCT_IF_C BFu17i_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_F");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_F");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_F, BFu17i_BFu8c_F)
//============================================================================


struct  BFu17i_BFu8c_I  {
  unsigned int v1:17;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu17i_BFu8c_I) C1{ Fi:17 Fc:8 Fi}



static void Test_BFu17i_BFu8c_I()
{
  {
    init_simple_test("BFu17i_BFu8c_I");
    static STRUCT_IF_C BFu17i_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_I");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_I");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_I, BFu17i_BFu8c_I)
//============================================================================


struct  BFu17i_BFu8c_Ip  {
  unsigned int v1:17;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu17i_BFu8c_Ip) C1{ Fi:17 Fc:8 Fp}



static void Test_BFu17i_BFu8c_Ip()
{
  {
    init_simple_test("BFu17i_BFu8c_Ip");
    static STRUCT_IF_C BFu17i_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Ip, BFu17i_BFu8c_Ip)
//============================================================================


struct  BFu17i_BFu8c_L  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu8c_L) C1{ Fi:17 Fc:8 FL}



static void Test_BFu17i_BFu8c_L()
{
  {
    init_simple_test("BFu17i_BFu8c_L");
    static STRUCT_IF_C BFu17i_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_L");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_L");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_L, BFu17i_BFu8c_L)
//============================================================================


struct  BFu17i_BFu8c_S  {
  unsigned int v1:17;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu17i_BFu8c_S) C1{ Fi:17 Fc:8 Fs}



static void Test_BFu17i_BFu8c_S()
{
  {
    init_simple_test("BFu17i_BFu8c_S");
    static STRUCT_IF_C BFu17i_BFu8c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_S");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_S");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_S, BFu17i_BFu8c_S)
//============================================================================


struct  BFu17i_BFu8c_Uc  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu8c_Uc) C1{ Fi:17 Fc:8 Fc}



static void Test_BFu17i_BFu8c_Uc()
{
  {
    init_simple_test("BFu17i_BFu8c_Uc");
    static STRUCT_IF_C BFu17i_BFu8c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Uc, BFu17i_BFu8c_Uc)
//============================================================================


struct  BFu17i_BFu8c_Ui  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu8c_Ui) C1{ Fi:17 Fc:8 Fi}



static void Test_BFu17i_BFu8c_Ui()
{
  {
    init_simple_test("BFu17i_BFu8c_Ui");
    static STRUCT_IF_C BFu17i_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Ui, BFu17i_BFu8c_Ui)
//============================================================================


struct  BFu17i_BFu8c_Ul  {
  unsigned int v1:17;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu8c_Ul) C1{ Fi:17 Fc:8 FL}



static void Test_BFu17i_BFu8c_Ul()
{
  {
    init_simple_test("BFu17i_BFu8c_Ul");
    static STRUCT_IF_C BFu17i_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Ul, BFu17i_BFu8c_Ul)
//============================================================================


struct  BFu17i_BFu8c_Us  {
  unsigned int v1:17;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu8c_Us) C1{ Fi:17 Fc:8 Fs}



static void Test_BFu17i_BFu8c_Us()
{
  {
    init_simple_test("BFu17i_BFu8c_Us");
    static STRUCT_IF_C BFu17i_BFu8c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Us");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Us");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Us, BFu17i_BFu8c_Us)
//============================================================================


struct  BFu17i_BFu8c_Vp  {
  unsigned int v1:17;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu17i_BFu8c_Vp) C1{ Fi:17 Fc:8 Fp}



static void Test_BFu17i_BFu8c_Vp()
{
  {
    init_simple_test("BFu17i_BFu8c_Vp");
    static STRUCT_IF_C BFu17i_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8c_Vp, BFu17i_BFu8c_Vp)
//============================================================================


struct  BFu17i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu17i_BFu8i) C1{ Fi:17 Fi:8}



static void Test_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i, BFu17i_BFu8i)
//============================================================================


struct  BFu17i_BFu8i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu8i_BFu15i) C1{ Fi:17 Fi:8 Fi:15}



static void Test_BFu17i_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu15i, BFu17i_BFu8i_BFu15i)
//============================================================================


struct  BFu17i_BFu8i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu8i_BFu15ll) C1{ Fi:17 Fi:8 FL:15}



static void Test_BFu17i_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu15ll, BFu17i_BFu8i_BFu15ll)
//============================================================================


struct  BFu17i_BFu8i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu8i_BFu15s) C1{ Fi:17 Fi:8 Fs:15}



static void Test_BFu17i_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu15s, BFu17i_BFu8i_BFu15s)
//============================================================================


struct  BFu17i_BFu8i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu8i_BFu16i) C1{ Fi:17 Fi:8 Fi:16}



static void Test_BFu17i_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu16i, BFu17i_BFu8i_BFu16i)
//============================================================================


struct  BFu17i_BFu8i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu8i_BFu16ll) C1{ Fi:17 Fi:8 FL:16}



static void Test_BFu17i_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu16ll, BFu17i_BFu8i_BFu16ll)
//============================================================================


struct  BFu17i_BFu8i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu8i_BFu16s) C1{ Fi:17 Fi:8 Fs:16}



static void Test_BFu17i_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu16s, BFu17i_BFu8i_BFu16s)
//============================================================================


struct  BFu17i_BFu8i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu8i_BFu17i) C1{ Fi:17 Fi:8 Fi:17}



static void Test_BFu17i_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu17i, BFu17i_BFu8i_BFu17i)
//============================================================================


struct  BFu17i_BFu8i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu8i_BFu17ll) C1{ Fi:17 Fi:8 FL:17}



static void Test_BFu17i_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu17ll, BFu17i_BFu8i_BFu17ll)
//============================================================================


struct  BFu17i_BFu8i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu8i_BFu1c) C1{ Fi:17 Fi:8 Fc:1}



static void Test_BFu17i_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu1c, BFu17i_BFu8i_BFu1c)
//============================================================================


struct  BFu17i_BFu8i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu8i_BFu1i) C1{ Fi:17 Fi:8 Fi:1}



static void Test_BFu17i_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu1i, BFu17i_BFu8i_BFu1i)
//============================================================================


struct  BFu17i_BFu8i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu8i_BFu1ll) C1{ Fi:17 Fi:8 FL:1}



static void Test_BFu17i_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu1ll, BFu17i_BFu8i_BFu1ll)
//============================================================================


struct  BFu17i_BFu8i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu8i_BFu1s) C1{ Fi:17 Fi:8 Fs:1}



static void Test_BFu17i_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu1s, BFu17i_BFu8i_BFu1s)
//============================================================================


struct  BFu17i_BFu8i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu8i_BFu31i) C1{ Fi:17 Fi:8 Fi:31}



static void Test_BFu17i_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu31i, BFu17i_BFu8i_BFu31i)
//============================================================================


struct  BFu17i_BFu8i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu8i_BFu31ll) C1{ Fi:17 Fi:8 FL:31}



static void Test_BFu17i_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu31ll, BFu17i_BFu8i_BFu31ll)
//============================================================================


struct  BFu17i_BFu8i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu8i_BFu32i) C1{ Fi:17 Fi:8 Fi:32}



static void Test_BFu17i_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu32i, BFu17i_BFu8i_BFu32i)
//============================================================================


struct  BFu17i_BFu8i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu8i_BFu32ll) C1{ Fi:17 Fi:8 FL:32}



static void Test_BFu17i_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu32ll, BFu17i_BFu8i_BFu32ll)
//============================================================================


struct  BFu17i_BFu8i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu8i_BFu33) C1{ Fi:17 Fi:8 FL:33}



static void Test_BFu17i_BFu8i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu33");
    static STRUCT_IF_C BFu17i_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu33, BFu17i_BFu8i_BFu33)
//============================================================================


struct  BFu17i_BFu8i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu8i_BFu7c) C1{ Fi:17 Fi:8 Fc:7}



static void Test_BFu17i_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu7c, BFu17i_BFu8i_BFu7c)
//============================================================================


struct  BFu17i_BFu8i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu8i_BFu7i) C1{ Fi:17 Fi:8 Fi:7}



static void Test_BFu17i_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu7i, BFu17i_BFu8i_BFu7i)
//============================================================================


struct  BFu17i_BFu8i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu8i_BFu7ll) C1{ Fi:17 Fi:8 FL:7}



static void Test_BFu17i_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu7ll, BFu17i_BFu8i_BFu7ll)
//============================================================================


struct  BFu17i_BFu8i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu8i_BFu7s) C1{ Fi:17 Fi:8 Fs:7}



static void Test_BFu17i_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu7s, BFu17i_BFu8i_BFu7s)
//============================================================================


struct  BFu17i_BFu8i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu8i_BFu8c) C1{ Fi:17 Fi:8 Fc:8}



static void Test_BFu17i_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu8i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu8c, BFu17i_BFu8i_BFu8c)
//============================================================================


struct  BFu17i_BFu8i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu8i_BFu8i) C1{ Fi:17 Fi:8 Fi:8}



static void Test_BFu17i_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu8i, BFu17i_BFu8i_BFu8i)
//============================================================================


struct  BFu17i_BFu8i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu8i_BFu8ll) C1{ Fi:17 Fi:8 FL:8}



static void Test_BFu17i_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu17i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu8ll, BFu17i_BFu8i_BFu8ll)
//============================================================================


struct  BFu17i_BFu8i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu8i_BFu8s) C1{ Fi:17 Fi:8 Fs:8}



static void Test_BFu17i_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu8s, BFu17i_BFu8i_BFu8s)
//============================================================================


struct  BFu17i_BFu8i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu8i_BFu9i) C1{ Fi:17 Fi:8 Fi:9}



static void Test_BFu17i_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu8i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu9i, BFu17i_BFu8i_BFu9i)
//============================================================================


struct  BFu17i_BFu8i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu8i_BFu9ll) C1{ Fi:17 Fi:8 FL:9}



static void Test_BFu17i_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu8i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu17i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu9ll, BFu17i_BFu8i_BFu9ll)
//============================================================================


struct  BFu17i_BFu8i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu8i_BFu9s) C1{ Fi:17 Fi:8 Fs:9}



static void Test_BFu17i_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu8i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu8i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_BFu9s, BFu17i_BFu8i_BFu9s)
//============================================================================


struct  BFu17i_BFu8i_C  {
  unsigned int v1:17;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu17i_BFu8i_C) C1{ Fi:17 Fi:8 Fc}



static void Test_BFu17i_BFu8i_C()
{
  {
    init_simple_test("BFu17i_BFu8i_C");
    static STRUCT_IF_C BFu17i_BFu8i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_C, BFu17i_BFu8i_C)
//============================================================================


struct  BFu17i_BFu8i_D  {
  unsigned int v1:17;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu17i_BFu8i_D) C1{ Fi:17 Fi:8 FL}



static void Test_BFu17i_BFu8i_D()
{
  {
    init_simple_test("BFu17i_BFu8i_D");
    static STRUCT_IF_C BFu17i_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_D, BFu17i_BFu8i_D)
//============================================================================


struct  BFu17i_BFu8i_F  {
  unsigned int v1:17;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu17i_BFu8i_F) C1{ Fi:17 Fi:8 Fi}



static void Test_BFu17i_BFu8i_F()
{
  {
    init_simple_test("BFu17i_BFu8i_F");
    static STRUCT_IF_C BFu17i_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_F, BFu17i_BFu8i_F)
//============================================================================


struct  BFu17i_BFu8i_I  {
  unsigned int v1:17;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu17i_BFu8i_I) C1{ Fi:17 Fi:8 Fi}



static void Test_BFu17i_BFu8i_I()
{
  {
    init_simple_test("BFu17i_BFu8i_I");
    static STRUCT_IF_C BFu17i_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_I, BFu17i_BFu8i_I)
//============================================================================


struct  BFu17i_BFu8i_Ip  {
  unsigned int v1:17;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu17i_BFu8i_Ip) C1{ Fi:17 Fi:8 Fp}



static void Test_BFu17i_BFu8i_Ip()
{
  {
    init_simple_test("BFu17i_BFu8i_Ip");
    static STRUCT_IF_C BFu17i_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Ip, BFu17i_BFu8i_Ip)
//============================================================================


struct  BFu17i_BFu8i_L  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu8i_L) C1{ Fi:17 Fi:8 FL}



static void Test_BFu17i_BFu8i_L()
{
  {
    init_simple_test("BFu17i_BFu8i_L");
    static STRUCT_IF_C BFu17i_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_L, BFu17i_BFu8i_L)
//============================================================================


struct  BFu17i_BFu8i_S  {
  unsigned int v1:17;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu17i_BFu8i_S) C1{ Fi:17 Fi:8 Fs}



static void Test_BFu17i_BFu8i_S()
{
  {
    init_simple_test("BFu17i_BFu8i_S");
    static STRUCT_IF_C BFu17i_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_S, BFu17i_BFu8i_S)
//============================================================================


struct  BFu17i_BFu8i_Uc  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu8i_Uc) C1{ Fi:17 Fi:8 Fc}



static void Test_BFu17i_BFu8i_Uc()
{
  {
    init_simple_test("BFu17i_BFu8i_Uc");
    static STRUCT_IF_C BFu17i_BFu8i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Uc, BFu17i_BFu8i_Uc)
//============================================================================


struct  BFu17i_BFu8i_Ui  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu8i_Ui) C1{ Fi:17 Fi:8 Fi}



static void Test_BFu17i_BFu8i_Ui()
{
  {
    init_simple_test("BFu17i_BFu8i_Ui");
    static STRUCT_IF_C BFu17i_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Ui, BFu17i_BFu8i_Ui)
//============================================================================


struct  BFu17i_BFu8i_Ul  {
  unsigned int v1:17;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu8i_Ul) C1{ Fi:17 Fi:8 FL}



static void Test_BFu17i_BFu8i_Ul()
{
  {
    init_simple_test("BFu17i_BFu8i_Ul");
    static STRUCT_IF_C BFu17i_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Ul, BFu17i_BFu8i_Ul)
//============================================================================


struct  BFu17i_BFu8i_Us  {
  unsigned int v1:17;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu8i_Us) C1{ Fi:17 Fi:8 Fs}



static void Test_BFu17i_BFu8i_Us()
{
  {
    init_simple_test("BFu17i_BFu8i_Us");
    static STRUCT_IF_C BFu17i_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Us, BFu17i_BFu8i_Us)
//============================================================================


struct  BFu17i_BFu8i_Vp  {
  unsigned int v1:17;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu17i_BFu8i_Vp) C1{ Fi:17 Fi:8 Fp}



static void Test_BFu17i_BFu8i_Vp()
{
  {
    init_simple_test("BFu17i_BFu8i_Vp");
    static STRUCT_IF_C BFu17i_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8i_Vp, BFu17i_BFu8i_Vp)
//============================================================================


struct  BFu17i_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu17i_BFu8ll) C1{ Fi:17 FL:8}



static void Test_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll, BFu17i_BFu8ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu8ll_BFu15i) C1{ Fi:17 FL:8 Fi:15}



static void Test_BFu17i_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu15i, BFu17i_BFu8ll_BFu15i)
//============================================================================


struct  BFu17i_BFu8ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu8ll_BFu15ll) C1{ Fi:17 FL:8 FL:15}



static void Test_BFu17i_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu15ll, BFu17i_BFu8ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu8ll_BFu15s) C1{ Fi:17 FL:8 Fs:15}



static void Test_BFu17i_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu15s, BFu17i_BFu8ll_BFu15s)
//============================================================================


struct  BFu17i_BFu8ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu8ll_BFu16i) C1{ Fi:17 FL:8 Fi:16}



static void Test_BFu17i_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu16i, BFu17i_BFu8ll_BFu16i)
//============================================================================


struct  BFu17i_BFu8ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu8ll_BFu16ll) C1{ Fi:17 FL:8 FL:16}



static void Test_BFu17i_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu16ll, BFu17i_BFu8ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu8ll_BFu16s) C1{ Fi:17 FL:8 Fs:16}



static void Test_BFu17i_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu16s, BFu17i_BFu8ll_BFu16s)
//============================================================================


struct  BFu17i_BFu8ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu8ll_BFu17i) C1{ Fi:17 FL:8 Fi:17}



static void Test_BFu17i_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu17i, BFu17i_BFu8ll_BFu17i)
//============================================================================


struct  BFu17i_BFu8ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu8ll_BFu17ll) C1{ Fi:17 FL:8 FL:17}



static void Test_BFu17i_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu17ll, BFu17i_BFu8ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu8ll_BFu1c) C1{ Fi:17 FL:8 Fc:1}



static void Test_BFu17i_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu1c, BFu17i_BFu8ll_BFu1c)
//============================================================================


struct  BFu17i_BFu8ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu8ll_BFu1i) C1{ Fi:17 FL:8 Fi:1}



static void Test_BFu17i_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu1i, BFu17i_BFu8ll_BFu1i)
//============================================================================


struct  BFu17i_BFu8ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu8ll_BFu1ll) C1{ Fi:17 FL:8 FL:1}



static void Test_BFu17i_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu1ll, BFu17i_BFu8ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu8ll_BFu1s) C1{ Fi:17 FL:8 Fs:1}



static void Test_BFu17i_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu1s, BFu17i_BFu8ll_BFu1s)
//============================================================================


struct  BFu17i_BFu8ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu8ll_BFu31i) C1{ Fi:17 FL:8 Fi:31}



static void Test_BFu17i_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu31i, BFu17i_BFu8ll_BFu31i)
//============================================================================


struct  BFu17i_BFu8ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu8ll_BFu31ll) C1{ Fi:17 FL:8 FL:31}



static void Test_BFu17i_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu31ll, BFu17i_BFu8ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu8ll_BFu32i) C1{ Fi:17 FL:8 Fi:32}



static void Test_BFu17i_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu32i, BFu17i_BFu8ll_BFu32i)
//============================================================================


struct  BFu17i_BFu8ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu8ll_BFu32ll) C1{ Fi:17 FL:8 FL:32}



static void Test_BFu17i_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu32ll, BFu17i_BFu8ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu8ll_BFu33) C1{ Fi:17 FL:8 FL:33}



static void Test_BFu17i_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu33, BFu17i_BFu8ll_BFu33)
//============================================================================


struct  BFu17i_BFu8ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu8ll_BFu7c) C1{ Fi:17 FL:8 Fc:7}



static void Test_BFu17i_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu7c, BFu17i_BFu8ll_BFu7c)
//============================================================================


struct  BFu17i_BFu8ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu8ll_BFu7i) C1{ Fi:17 FL:8 Fi:7}



static void Test_BFu17i_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu7i, BFu17i_BFu8ll_BFu7i)
//============================================================================


struct  BFu17i_BFu8ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu8ll_BFu7ll) C1{ Fi:17 FL:8 FL:7}



static void Test_BFu17i_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu7ll, BFu17i_BFu8ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu8ll_BFu7s) C1{ Fi:17 FL:8 Fs:7}



static void Test_BFu17i_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu7s, BFu17i_BFu8ll_BFu7s)
//============================================================================


struct  BFu17i_BFu8ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu8ll_BFu8c) C1{ Fi:17 FL:8 Fc:8}



static void Test_BFu17i_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu8c, BFu17i_BFu8ll_BFu8c)
//============================================================================


struct  BFu17i_BFu8ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu8ll_BFu8i) C1{ Fi:17 FL:8 Fi:8}



static void Test_BFu17i_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu8i, BFu17i_BFu8ll_BFu8i)
//============================================================================


struct  BFu17i_BFu8ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu8ll_BFu8ll) C1{ Fi:17 FL:8 FL:8}



static void Test_BFu17i_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu17i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu8ll, BFu17i_BFu8ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu8ll_BFu8s) C1{ Fi:17 FL:8 Fs:8}



static void Test_BFu17i_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu8s, BFu17i_BFu8ll_BFu8s)
//============================================================================


struct  BFu17i_BFu8ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu8ll_BFu9i) C1{ Fi:17 FL:8 Fi:9}



static void Test_BFu17i_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu9i, BFu17i_BFu8ll_BFu9i)
//============================================================================


struct  BFu17i_BFu8ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu8ll_BFu9ll) C1{ Fi:17 FL:8 FL:9}



static void Test_BFu17i_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu17i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu9ll, BFu17i_BFu8ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu8ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu8ll_BFu9s) C1{ Fi:17 FL:8 Fs:9}



static void Test_BFu17i_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu8ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_BFu9s, BFu17i_BFu8ll_BFu9s)
//============================================================================


struct  BFu17i_BFu8ll_C  {
  unsigned int v1:17;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu17i_BFu8ll_C) C1{ Fi:17 FL:8 Fc}



static void Test_BFu17i_BFu8ll_C()
{
  {
    init_simple_test("BFu17i_BFu8ll_C");
    static STRUCT_IF_C BFu17i_BFu8ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_C, BFu17i_BFu8ll_C)
//============================================================================


struct  BFu17i_BFu8ll_D  {
  unsigned int v1:17;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu17i_BFu8ll_D) C1{ Fi:17 FL:8 FL}



static void Test_BFu17i_BFu8ll_D()
{
  {
    init_simple_test("BFu17i_BFu8ll_D");
    static STRUCT_IF_C BFu17i_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_D, BFu17i_BFu8ll_D)
//============================================================================


struct  BFu17i_BFu8ll_F  {
  unsigned int v1:17;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu17i_BFu8ll_F) C1{ Fi:17 FL:8 Fi}



static void Test_BFu17i_BFu8ll_F()
{
  {
    init_simple_test("BFu17i_BFu8ll_F");
    static STRUCT_IF_C BFu17i_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_F, BFu17i_BFu8ll_F)
//============================================================================


struct  BFu17i_BFu8ll_I  {
  unsigned int v1:17;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu17i_BFu8ll_I) C1{ Fi:17 FL:8 Fi}



static void Test_BFu17i_BFu8ll_I()
{
  {
    init_simple_test("BFu17i_BFu8ll_I");
    static STRUCT_IF_C BFu17i_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_I, BFu17i_BFu8ll_I)
//============================================================================


struct  BFu17i_BFu8ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu17i_BFu8ll_Ip) C1{ Fi:17 FL:8 Fp}



static void Test_BFu17i_BFu8ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu8ll_Ip");
    static STRUCT_IF_C BFu17i_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Ip, BFu17i_BFu8ll_Ip)
//============================================================================


struct  BFu17i_BFu8ll_L  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu8ll_L) C1{ Fi:17 FL:8 FL}



static void Test_BFu17i_BFu8ll_L()
{
  {
    init_simple_test("BFu17i_BFu8ll_L");
    static STRUCT_IF_C BFu17i_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_L, BFu17i_BFu8ll_L)
//============================================================================


struct  BFu17i_BFu8ll_S  {
  unsigned int v1:17;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu17i_BFu8ll_S) C1{ Fi:17 FL:8 Fs}



static void Test_BFu17i_BFu8ll_S()
{
  {
    init_simple_test("BFu17i_BFu8ll_S");
    static STRUCT_IF_C BFu17i_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_S, BFu17i_BFu8ll_S)
//============================================================================


struct  BFu17i_BFu8ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu8ll_Uc) C1{ Fi:17 FL:8 Fc}



static void Test_BFu17i_BFu8ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu8ll_Uc");
    static STRUCT_IF_C BFu17i_BFu8ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Uc, BFu17i_BFu8ll_Uc)
//============================================================================


struct  BFu17i_BFu8ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu8ll_Ui) C1{ Fi:17 FL:8 Fi}



static void Test_BFu17i_BFu8ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu8ll_Ui");
    static STRUCT_IF_C BFu17i_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Ui, BFu17i_BFu8ll_Ui)
//============================================================================


struct  BFu17i_BFu8ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu8ll_Ul) C1{ Fi:17 FL:8 FL}



static void Test_BFu17i_BFu8ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu8ll_Ul");
    static STRUCT_IF_C BFu17i_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Ul, BFu17i_BFu8ll_Ul)
//============================================================================


struct  BFu17i_BFu8ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu8ll_Us) C1{ Fi:17 FL:8 Fs}



static void Test_BFu17i_BFu8ll_Us()
{
  {
    init_simple_test("BFu17i_BFu8ll_Us");
    static STRUCT_IF_C BFu17i_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Us, BFu17i_BFu8ll_Us)
//============================================================================


struct  BFu17i_BFu8ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu17i_BFu8ll_Vp) C1{ Fi:17 FL:8 Fp}



static void Test_BFu17i_BFu8ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu8ll_Vp");
    static STRUCT_IF_C BFu17i_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8ll_Vp, BFu17i_BFu8ll_Vp)
//============================================================================


struct  BFu17i_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu17i_BFu8s) C1{ Fi:17 Fs:8}



static void Test_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s, BFu17i_BFu8s)
//============================================================================


struct  BFu17i_BFu8s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu8s_BFu15i) C1{ Fi:17 Fs:8 Fi:15}



static void Test_BFu17i_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu15i, BFu17i_BFu8s_BFu15i)
//============================================================================


struct  BFu17i_BFu8s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu8s_BFu15ll) C1{ Fi:17 Fs:8 FL:15}



static void Test_BFu17i_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu15ll, BFu17i_BFu8s_BFu15ll)
//============================================================================


struct  BFu17i_BFu8s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu8s_BFu15s) C1{ Fi:17 Fs:8 Fs:15}



static void Test_BFu17i_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu15s, BFu17i_BFu8s_BFu15s)
//============================================================================


struct  BFu17i_BFu8s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu8s_BFu16i) C1{ Fi:17 Fs:8 Fi:16}



static void Test_BFu17i_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu16i, BFu17i_BFu8s_BFu16i)
//============================================================================


struct  BFu17i_BFu8s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu8s_BFu16ll) C1{ Fi:17 Fs:8 FL:16}



static void Test_BFu17i_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu16ll, BFu17i_BFu8s_BFu16ll)
//============================================================================


struct  BFu17i_BFu8s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu8s_BFu16s) C1{ Fi:17 Fs:8 Fs:16}



static void Test_BFu17i_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu16s, BFu17i_BFu8s_BFu16s)
//============================================================================


struct  BFu17i_BFu8s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu8s_BFu17i) C1{ Fi:17 Fs:8 Fi:17}



static void Test_BFu17i_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu17i, BFu17i_BFu8s_BFu17i)
//============================================================================


struct  BFu17i_BFu8s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu8s_BFu17ll) C1{ Fi:17 Fs:8 FL:17}



static void Test_BFu17i_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu17ll, BFu17i_BFu8s_BFu17ll)
//============================================================================


struct  BFu17i_BFu8s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu8s_BFu1c) C1{ Fi:17 Fs:8 Fc:1}



static void Test_BFu17i_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu1c, BFu17i_BFu8s_BFu1c)
//============================================================================


struct  BFu17i_BFu8s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu8s_BFu1i) C1{ Fi:17 Fs:8 Fi:1}



static void Test_BFu17i_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu1i, BFu17i_BFu8s_BFu1i)
//============================================================================


struct  BFu17i_BFu8s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu8s_BFu1ll) C1{ Fi:17 Fs:8 FL:1}



static void Test_BFu17i_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu1ll, BFu17i_BFu8s_BFu1ll)
//============================================================================


struct  BFu17i_BFu8s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu8s_BFu1s) C1{ Fi:17 Fs:8 Fs:1}



static void Test_BFu17i_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17i_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu1s, BFu17i_BFu8s_BFu1s)
//============================================================================


struct  BFu17i_BFu8s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu8s_BFu31i) C1{ Fi:17 Fs:8 Fi:31}



static void Test_BFu17i_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu31i, BFu17i_BFu8s_BFu31i)
//============================================================================


struct  BFu17i_BFu8s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu8s_BFu31ll) C1{ Fi:17 Fs:8 FL:31}



static void Test_BFu17i_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu31ll, BFu17i_BFu8s_BFu31ll)
//============================================================================


struct  BFu17i_BFu8s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu8s_BFu32i) C1{ Fi:17 Fs:8 Fi:32}



static void Test_BFu17i_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu32i, BFu17i_BFu8s_BFu32i)
//============================================================================


struct  BFu17i_BFu8s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu8s_BFu32ll) C1{ Fi:17 Fs:8 FL:32}



static void Test_BFu17i_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu32ll, BFu17i_BFu8s_BFu32ll)
//============================================================================


struct  BFu17i_BFu8s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu8s_BFu33) C1{ Fi:17 Fs:8 FL:33}



static void Test_BFu17i_BFu8s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu33");
    static STRUCT_IF_C BFu17i_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu33, BFu17i_BFu8s_BFu33)
//============================================================================


struct  BFu17i_BFu8s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu8s_BFu7c) C1{ Fi:17 Fs:8 Fc:7}



static void Test_BFu17i_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu7c, BFu17i_BFu8s_BFu7c)
//============================================================================


struct  BFu17i_BFu8s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu8s_BFu7i) C1{ Fi:17 Fs:8 Fi:7}



static void Test_BFu17i_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu7i, BFu17i_BFu8s_BFu7i)
//============================================================================


struct  BFu17i_BFu8s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu8s_BFu7ll) C1{ Fi:17 Fs:8 FL:7}



static void Test_BFu17i_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu7ll, BFu17i_BFu8s_BFu7ll)
//============================================================================


struct  BFu17i_BFu8s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu8s_BFu7s) C1{ Fi:17 Fs:8 Fs:7}



static void Test_BFu17i_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu8s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu7s, BFu17i_BFu8s_BFu7s)
//============================================================================


struct  BFu17i_BFu8s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu8s_BFu8c) C1{ Fi:17 Fs:8 Fc:8}



static void Test_BFu17i_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu8s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu8c, BFu17i_BFu8s_BFu8c)
//============================================================================


struct  BFu17i_BFu8s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu8s_BFu8i) C1{ Fi:17 Fs:8 Fi:8}



static void Test_BFu17i_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu8i, BFu17i_BFu8s_BFu8i)
//============================================================================


struct  BFu17i_BFu8s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu8s_BFu8ll) C1{ Fi:17 Fs:8 FL:8}



static void Test_BFu17i_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu17i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu8ll, BFu17i_BFu8s_BFu8ll)
//============================================================================


struct  BFu17i_BFu8s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu8s_BFu8s) C1{ Fi:17 Fs:8 Fs:8}



static void Test_BFu17i_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu8s, BFu17i_BFu8s_BFu8s)
//============================================================================


struct  BFu17i_BFu8s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu8s_BFu9i) C1{ Fi:17 Fs:8 Fi:9}



static void Test_BFu17i_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu9i, BFu17i_BFu8s_BFu9i)
//============================================================================


struct  BFu17i_BFu8s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu8s_BFu9ll) C1{ Fi:17 Fs:8 FL:9}



static void Test_BFu17i_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu17i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu9ll, BFu17i_BFu8s_BFu9ll)
//============================================================================


struct  BFu17i_BFu8s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu8s_BFu9s) C1{ Fi:17 Fs:8 Fs:9}



static void Test_BFu17i_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu8s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu8s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_BFu9s, BFu17i_BFu8s_BFu9s)
//============================================================================


struct  BFu17i_BFu8s_C  {
  unsigned int v1:17;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu17i_BFu8s_C) C1{ Fi:17 Fs:8 Fc}



static void Test_BFu17i_BFu8s_C()
{
  {
    init_simple_test("BFu17i_BFu8s_C");
    static STRUCT_IF_C BFu17i_BFu8s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_C, BFu17i_BFu8s_C)
//============================================================================


struct  BFu17i_BFu8s_D  {
  unsigned int v1:17;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu17i_BFu8s_D) C1{ Fi:17 Fs:8 FL}



static void Test_BFu17i_BFu8s_D()
{
  {
    init_simple_test("BFu17i_BFu8s_D");
    static STRUCT_IF_C BFu17i_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_D, BFu17i_BFu8s_D)
//============================================================================


struct  BFu17i_BFu8s_F  {
  unsigned int v1:17;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu17i_BFu8s_F) C1{ Fi:17 Fs:8 Fi}



static void Test_BFu17i_BFu8s_F()
{
  {
    init_simple_test("BFu17i_BFu8s_F");
    static STRUCT_IF_C BFu17i_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_F, BFu17i_BFu8s_F)
//============================================================================


struct  BFu17i_BFu8s_I  {
  unsigned int v1:17;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu17i_BFu8s_I) C1{ Fi:17 Fs:8 Fi}



static void Test_BFu17i_BFu8s_I()
{
  {
    init_simple_test("BFu17i_BFu8s_I");
    static STRUCT_IF_C BFu17i_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_I, BFu17i_BFu8s_I)
//============================================================================


struct  BFu17i_BFu8s_Ip  {
  unsigned int v1:17;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu17i_BFu8s_Ip) C1{ Fi:17 Fs:8 Fp}



static void Test_BFu17i_BFu8s_Ip()
{
  {
    init_simple_test("BFu17i_BFu8s_Ip");
    static STRUCT_IF_C BFu17i_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Ip, BFu17i_BFu8s_Ip)
//============================================================================


struct  BFu17i_BFu8s_L  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu8s_L) C1{ Fi:17 Fs:8 FL}



static void Test_BFu17i_BFu8s_L()
{
  {
    init_simple_test("BFu17i_BFu8s_L");
    static STRUCT_IF_C BFu17i_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_L, BFu17i_BFu8s_L)
//============================================================================


struct  BFu17i_BFu8s_S  {
  unsigned int v1:17;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu17i_BFu8s_S) C1{ Fi:17 Fs:8 Fs}



static void Test_BFu17i_BFu8s_S()
{
  {
    init_simple_test("BFu17i_BFu8s_S");
    static STRUCT_IF_C BFu17i_BFu8s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_S, BFu17i_BFu8s_S)
//============================================================================


struct  BFu17i_BFu8s_Uc  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu8s_Uc) C1{ Fi:17 Fs:8 Fc}



static void Test_BFu17i_BFu8s_Uc()
{
  {
    init_simple_test("BFu17i_BFu8s_Uc");
    static STRUCT_IF_C BFu17i_BFu8s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Uc, BFu17i_BFu8s_Uc)
//============================================================================


struct  BFu17i_BFu8s_Ui  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu8s_Ui) C1{ Fi:17 Fs:8 Fi}



static void Test_BFu17i_BFu8s_Ui()
{
  {
    init_simple_test("BFu17i_BFu8s_Ui");
    static STRUCT_IF_C BFu17i_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Ui, BFu17i_BFu8s_Ui)
//============================================================================


struct  BFu17i_BFu8s_Ul  {
  unsigned int v1:17;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu8s_Ul) C1{ Fi:17 Fs:8 FL}



static void Test_BFu17i_BFu8s_Ul()
{
  {
    init_simple_test("BFu17i_BFu8s_Ul");
    static STRUCT_IF_C BFu17i_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Ul, BFu17i_BFu8s_Ul)
//============================================================================


struct  BFu17i_BFu8s_Us  {
  unsigned int v1:17;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu8s_Us) C1{ Fi:17 Fs:8 Fs}



static void Test_BFu17i_BFu8s_Us()
{
  {
    init_simple_test("BFu17i_BFu8s_Us");
    static STRUCT_IF_C BFu17i_BFu8s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Us, BFu17i_BFu8s_Us)
//============================================================================


struct  BFu17i_BFu8s_Vp  {
  unsigned int v1:17;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu17i_BFu8s_Vp) C1{ Fi:17 Fs:8 Fp}



static void Test_BFu17i_BFu8s_Vp()
{
  {
    init_simple_test("BFu17i_BFu8s_Vp");
    static STRUCT_IF_C BFu17i_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu8s_Vp, BFu17i_BFu8s_Vp)
//============================================================================


struct  BFu17i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu17i_BFu9i) C1{ Fi:17 Fi:9}



static void Test_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i, BFu17i_BFu9i)
//============================================================================


struct  BFu17i_BFu9i_BFu15i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu9i_BFu15i) C1{ Fi:17 Fi:9 Fi:15}



static void Test_BFu17i_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu15i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu15i, BFu17i_BFu9i_BFu15i)
//============================================================================


struct  BFu17i_BFu9i_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu9i_BFu15ll) C1{ Fi:17 Fi:9 FL:15}



static void Test_BFu17i_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, 1, "BFu17i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu15ll, BFu17i_BFu9i_BFu15ll)
//============================================================================


struct  BFu17i_BFu9i_BFu15s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu9i_BFu15s) C1{ Fi:17 Fi:9 Fs:15}



static void Test_BFu17i_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu15s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu15s, BFu17i_BFu9i_BFu15s)
//============================================================================


struct  BFu17i_BFu9i_BFu16i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu9i_BFu16i) C1{ Fi:17 Fi:9 Fi:16}



static void Test_BFu17i_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu16i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu16i, BFu17i_BFu9i_BFu16i)
//============================================================================


struct  BFu17i_BFu9i_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu9i_BFu16ll) C1{ Fi:17 Fi:9 FL:16}



static void Test_BFu17i_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, 1, "BFu17i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu16ll, BFu17i_BFu9i_BFu16ll)
//============================================================================


struct  BFu17i_BFu9i_BFu16s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu9i_BFu16s) C1{ Fi:17 Fi:9 Fs:16}



static void Test_BFu17i_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu16s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu16s, BFu17i_BFu9i_BFu16s)
//============================================================================


struct  BFu17i_BFu9i_BFu17i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu9i_BFu17i) C1{ Fi:17 Fi:9 Fi:17}



static void Test_BFu17i_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu17i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu17i, BFu17i_BFu9i_BFu17i)
//============================================================================


struct  BFu17i_BFu9i_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu9i_BFu17ll) C1{ Fi:17 Fi:9 FL:17}



static void Test_BFu17i_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, 1, "BFu17i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu17ll, BFu17i_BFu9i_BFu17ll)
//============================================================================


struct  BFu17i_BFu9i_BFu1c  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu9i_BFu1c) C1{ Fi:17 Fi:9 Fc:1}



static void Test_BFu17i_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu1c");
    static STRUCT_IF_C BFu17i_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu1c, BFu17i_BFu9i_BFu1c)
//============================================================================


struct  BFu17i_BFu9i_BFu1i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu9i_BFu1i) C1{ Fi:17 Fi:9 Fi:1}



static void Test_BFu17i_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu1i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu1i, BFu17i_BFu9i_BFu1i)
//============================================================================


struct  BFu17i_BFu9i_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu9i_BFu1ll) C1{ Fi:17 Fi:9 FL:1}



static void Test_BFu17i_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu1ll, BFu17i_BFu9i_BFu1ll)
//============================================================================


struct  BFu17i_BFu9i_BFu1s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu9i_BFu1s) C1{ Fi:17 Fi:9 Fs:1}



static void Test_BFu17i_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu1s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu1s, BFu17i_BFu9i_BFu1s)
//============================================================================


struct  BFu17i_BFu9i_BFu31i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu9i_BFu31i) C1{ Fi:17 Fi:9 Fi:31}



static void Test_BFu17i_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu31i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu31i, BFu17i_BFu9i_BFu31i)
//============================================================================


struct  BFu17i_BFu9i_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu9i_BFu31ll) C1{ Fi:17 Fi:9 FL:31}



static void Test_BFu17i_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, 1, "BFu17i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu31ll, BFu17i_BFu9i_BFu31ll)
//============================================================================


struct  BFu17i_BFu9i_BFu32i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu9i_BFu32i) C1{ Fi:17 Fi:9 Fi:32}



static void Test_BFu17i_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu32i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu32i, BFu17i_BFu9i_BFu32i)
//============================================================================


struct  BFu17i_BFu9i_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu9i_BFu32ll) C1{ Fi:17 Fi:9 FL:32}



static void Test_BFu17i_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, 1, "BFu17i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu32ll, BFu17i_BFu9i_BFu32ll)
//============================================================================


struct  BFu17i_BFu9i_BFu33  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu9i_BFu33) C1{ Fi:17 Fi:9 FL:33}



static void Test_BFu17i_BFu9i_BFu33()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu33");
    static STRUCT_IF_C BFu17i_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, 1, "BFu17i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu33, BFu17i_BFu9i_BFu33)
//============================================================================


struct  BFu17i_BFu9i_BFu7c  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu9i_BFu7c) C1{ Fi:17 Fi:9 Fc:7}



static void Test_BFu17i_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu7c");
    static STRUCT_IF_C BFu17i_BFu9i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu7c, BFu17i_BFu9i_BFu7c)
//============================================================================


struct  BFu17i_BFu9i_BFu7i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu9i_BFu7i) C1{ Fi:17 Fi:9 Fi:7}



static void Test_BFu17i_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu7i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu7i, BFu17i_BFu9i_BFu7i)
//============================================================================


struct  BFu17i_BFu9i_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu9i_BFu7ll) C1{ Fi:17 Fi:9 FL:7}



static void Test_BFu17i_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, 1, "BFu17i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu7ll, BFu17i_BFu9i_BFu7ll)
//============================================================================


struct  BFu17i_BFu9i_BFu7s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu9i_BFu7s) C1{ Fi:17 Fi:9 Fs:7}



static void Test_BFu17i_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu7s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu7s, BFu17i_BFu9i_BFu7s)
//============================================================================


struct  BFu17i_BFu9i_BFu8c  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu9i_BFu8c) C1{ Fi:17 Fi:9 Fc:8}



static void Test_BFu17i_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu8c");
    static STRUCT_IF_C BFu17i_BFu9i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu8c, BFu17i_BFu9i_BFu8c)
//============================================================================


struct  BFu17i_BFu9i_BFu8i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu9i_BFu8i) C1{ Fi:17 Fi:9 Fi:8}



static void Test_BFu17i_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu8i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu8i, BFu17i_BFu9i_BFu8i)
//============================================================================


struct  BFu17i_BFu9i_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu9i_BFu8ll) C1{ Fi:17 Fi:9 FL:8}



static void Test_BFu17i_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, 1, "BFu17i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu8ll, BFu17i_BFu9i_BFu8ll)
//============================================================================


struct  BFu17i_BFu9i_BFu8s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu9i_BFu8s) C1{ Fi:17 Fi:9 Fs:8}



static void Test_BFu17i_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu8s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu8s, BFu17i_BFu9i_BFu8s)
//============================================================================


struct  BFu17i_BFu9i_BFu9i  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu9i_BFu9i) C1{ Fi:17 Fi:9 Fi:9}



static void Test_BFu17i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu17i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu9i, BFu17i_BFu9i_BFu9i)
//============================================================================


struct  BFu17i_BFu9i_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu9i_BFu9ll) C1{ Fi:17 Fi:9 FL:9}



static void Test_BFu17i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, 1, "BFu17i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu9ll, BFu17i_BFu9i_BFu9ll)
//============================================================================


struct  BFu17i_BFu9i_BFu9s  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu9i_BFu9s) C1{ Fi:17 Fi:9 Fs:9}



static void Test_BFu17i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_BFu9s, BFu17i_BFu9i_BFu9s)
//============================================================================


struct  BFu17i_BFu9i_C  {
  unsigned int v1:17;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu17i_BFu9i_C) C1{ Fi:17 Fi:9 Fc}



static void Test_BFu17i_BFu9i_C()
{
  {
    init_simple_test("BFu17i_BFu9i_C");
    static STRUCT_IF_C BFu17i_BFu9i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_C, BFu17i_BFu9i_C)
//============================================================================


struct  BFu17i_BFu9i_D  {
  unsigned int v1:17;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu17i_BFu9i_D) C1{ Fi:17 Fi:9 FL}



static void Test_BFu17i_BFu9i_D()
{
  {
    init_simple_test("BFu17i_BFu9i_D");
    static STRUCT_IF_C BFu17i_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_D, BFu17i_BFu9i_D)
//============================================================================


struct  BFu17i_BFu9i_F  {
  unsigned int v1:17;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu17i_BFu9i_F) C1{ Fi:17 Fi:9 Fi}



static void Test_BFu17i_BFu9i_F()
{
  {
    init_simple_test("BFu17i_BFu9i_F");
    static STRUCT_IF_C BFu17i_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_F, BFu17i_BFu9i_F)
//============================================================================


struct  BFu17i_BFu9i_I  {
  unsigned int v1:17;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu17i_BFu9i_I) C1{ Fi:17 Fi:9 Fi}



static void Test_BFu17i_BFu9i_I()
{
  {
    init_simple_test("BFu17i_BFu9i_I");
    static STRUCT_IF_C BFu17i_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_I, BFu17i_BFu9i_I)
//============================================================================


struct  BFu17i_BFu9i_Ip  {
  unsigned int v1:17;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu17i_BFu9i_Ip) C1{ Fi:17 Fi:9 Fp}



static void Test_BFu17i_BFu9i_Ip()
{
  {
    init_simple_test("BFu17i_BFu9i_Ip");
    static STRUCT_IF_C BFu17i_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Ip, BFu17i_BFu9i_Ip)
//============================================================================


struct  BFu17i_BFu9i_L  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu9i_L) C1{ Fi:17 Fi:9 FL}



static void Test_BFu17i_BFu9i_L()
{
  {
    init_simple_test("BFu17i_BFu9i_L");
    static STRUCT_IF_C BFu17i_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_L, BFu17i_BFu9i_L)
//============================================================================


struct  BFu17i_BFu9i_S  {
  unsigned int v1:17;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu17i_BFu9i_S) C1{ Fi:17 Fi:9 Fs}



static void Test_BFu17i_BFu9i_S()
{
  {
    init_simple_test("BFu17i_BFu9i_S");
    static STRUCT_IF_C BFu17i_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_S, BFu17i_BFu9i_S)
//============================================================================


struct  BFu17i_BFu9i_Uc  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu9i_Uc) C1{ Fi:17 Fi:9 Fc}



static void Test_BFu17i_BFu9i_Uc()
{
  {
    init_simple_test("BFu17i_BFu9i_Uc");
    static STRUCT_IF_C BFu17i_BFu9i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Uc, BFu17i_BFu9i_Uc)
//============================================================================


struct  BFu17i_BFu9i_Ui  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu9i_Ui) C1{ Fi:17 Fi:9 Fi}



static void Test_BFu17i_BFu9i_Ui()
{
  {
    init_simple_test("BFu17i_BFu9i_Ui");
    static STRUCT_IF_C BFu17i_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Ui, BFu17i_BFu9i_Ui)
//============================================================================


struct  BFu17i_BFu9i_Ul  {
  unsigned int v1:17;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu9i_Ul) C1{ Fi:17 Fi:9 FL}



static void Test_BFu17i_BFu9i_Ul()
{
  {
    init_simple_test("BFu17i_BFu9i_Ul");
    static STRUCT_IF_C BFu17i_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Ul, BFu17i_BFu9i_Ul)
//============================================================================


struct  BFu17i_BFu9i_Us  {
  unsigned int v1:17;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu9i_Us) C1{ Fi:17 Fi:9 Fs}



static void Test_BFu17i_BFu9i_Us()
{
  {
    init_simple_test("BFu17i_BFu9i_Us");
    static STRUCT_IF_C BFu17i_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Us, BFu17i_BFu9i_Us)
//============================================================================


struct  BFu17i_BFu9i_Vp  {
  unsigned int v1:17;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu17i_BFu9i_Vp) C1{ Fi:17 Fi:9 Fp}



static void Test_BFu17i_BFu9i_Vp()
{
  {
    init_simple_test("BFu17i_BFu9i_Vp");
    static STRUCT_IF_C BFu17i_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9i_Vp, BFu17i_BFu9i_Vp)
//============================================================================


struct  BFu17i_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu17i_BFu9ll) C1{ Fi:17 FL:9}



static void Test_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll, BFu17i_BFu9ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu9ll_BFu15i) C1{ Fi:17 FL:9 Fi:15}



static void Test_BFu17i_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu15i, BFu17i_BFu9ll_BFu15i)
//============================================================================


struct  BFu17i_BFu9ll_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu9ll_BFu15ll) C1{ Fi:17 FL:9 FL:15}



static void Test_BFu17i_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, 1, "BFu17i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu15ll, BFu17i_BFu9ll_BFu15ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu9ll_BFu15s) C1{ Fi:17 FL:9 Fs:15}



static void Test_BFu17i_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu15s, BFu17i_BFu9ll_BFu15s)
//============================================================================


struct  BFu17i_BFu9ll_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu9ll_BFu16i) C1{ Fi:17 FL:9 Fi:16}



static void Test_BFu17i_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu16i, BFu17i_BFu9ll_BFu16i)
//============================================================================


struct  BFu17i_BFu9ll_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu9ll_BFu16ll) C1{ Fi:17 FL:9 FL:16}



static void Test_BFu17i_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, 1, "BFu17i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu16ll, BFu17i_BFu9ll_BFu16ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu9ll_BFu16s) C1{ Fi:17 FL:9 Fs:16}



static void Test_BFu17i_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu16s, BFu17i_BFu9ll_BFu16s)
//============================================================================


struct  BFu17i_BFu9ll_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu9ll_BFu17i) C1{ Fi:17 FL:9 Fi:17}



static void Test_BFu17i_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu17i, BFu17i_BFu9ll_BFu17i)
//============================================================================


struct  BFu17i_BFu9ll_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu9ll_BFu17ll) C1{ Fi:17 FL:9 FL:17}



static void Test_BFu17i_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, 1, "BFu17i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu17ll, BFu17i_BFu9ll_BFu17ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu9ll_BFu1c) C1{ Fi:17 FL:9 Fc:1}



static void Test_BFu17i_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu1c, BFu17i_BFu9ll_BFu1c)
//============================================================================


struct  BFu17i_BFu9ll_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu9ll_BFu1i) C1{ Fi:17 FL:9 Fi:1}



static void Test_BFu17i_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu1i, BFu17i_BFu9ll_BFu1i)
//============================================================================


struct  BFu17i_BFu9ll_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu9ll_BFu1ll) C1{ Fi:17 FL:9 FL:1}



static void Test_BFu17i_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu1ll, BFu17i_BFu9ll_BFu1ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu9ll_BFu1s) C1{ Fi:17 FL:9 Fs:1}



static void Test_BFu17i_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu1s, BFu17i_BFu9ll_BFu1s)
//============================================================================


struct  BFu17i_BFu9ll_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu9ll_BFu31i) C1{ Fi:17 FL:9 Fi:31}



static void Test_BFu17i_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu31i, BFu17i_BFu9ll_BFu31i)
//============================================================================


struct  BFu17i_BFu9ll_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu9ll_BFu31ll) C1{ Fi:17 FL:9 FL:31}



static void Test_BFu17i_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, 1, "BFu17i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu31ll, BFu17i_BFu9ll_BFu31ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu9ll_BFu32i) C1{ Fi:17 FL:9 Fi:32}



static void Test_BFu17i_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu32i, BFu17i_BFu9ll_BFu32i)
//============================================================================


struct  BFu17i_BFu9ll_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu9ll_BFu32ll) C1{ Fi:17 FL:9 FL:32}



static void Test_BFu17i_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, 1, "BFu17i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu32ll, BFu17i_BFu9ll_BFu32ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu33  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu9ll_BFu33) C1{ Fi:17 FL:9 FL:33}



static void Test_BFu17i_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu33");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, 1, "BFu17i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu33, BFu17i_BFu9ll_BFu33)
//============================================================================


struct  BFu17i_BFu9ll_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu9ll_BFu7c) C1{ Fi:17 FL:9 Fc:7}



static void Test_BFu17i_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu7c, BFu17i_BFu9ll_BFu7c)
//============================================================================


struct  BFu17i_BFu9ll_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu9ll_BFu7i) C1{ Fi:17 FL:9 Fi:7}



static void Test_BFu17i_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu7i, BFu17i_BFu9ll_BFu7i)
//============================================================================


struct  BFu17i_BFu9ll_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu9ll_BFu7ll) C1{ Fi:17 FL:9 FL:7}



static void Test_BFu17i_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, 1, "BFu17i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu7ll, BFu17i_BFu9ll_BFu7ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu9ll_BFu7s) C1{ Fi:17 FL:9 Fs:7}



static void Test_BFu17i_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu7s, BFu17i_BFu9ll_BFu7s)
//============================================================================


struct  BFu17i_BFu9ll_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu9ll_BFu8c) C1{ Fi:17 FL:9 Fc:8}



static void Test_BFu17i_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu8c, BFu17i_BFu9ll_BFu8c)
//============================================================================


struct  BFu17i_BFu9ll_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu9ll_BFu8i) C1{ Fi:17 FL:9 Fi:8}



static void Test_BFu17i_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu8i, BFu17i_BFu9ll_BFu8i)
//============================================================================


struct  BFu17i_BFu9ll_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu9ll_BFu8ll) C1{ Fi:17 FL:9 FL:8}



static void Test_BFu17i_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, 1, "BFu17i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu8ll, BFu17i_BFu9ll_BFu8ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu9ll_BFu8s) C1{ Fi:17 FL:9 Fs:8}



static void Test_BFu17i_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu8s, BFu17i_BFu9ll_BFu8s)
//============================================================================


struct  BFu17i_BFu9ll_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu9ll_BFu9i) C1{ Fi:17 FL:9 Fi:9}



static void Test_BFu17i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu9i, BFu17i_BFu9ll_BFu9i)
//============================================================================


struct  BFu17i_BFu9ll_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu9ll_BFu9ll) C1{ Fi:17 FL:9 FL:9}



static void Test_BFu17i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, 1, "BFu17i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu9ll, BFu17i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu17i_BFu9ll_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu9ll_BFu9s) C1{ Fi:17 FL:9 Fs:9}



static void Test_BFu17i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu17i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_BFu9s, BFu17i_BFu9ll_BFu9s)
//============================================================================


struct  BFu17i_BFu9ll_C  {
  unsigned int v1:17;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu17i_BFu9ll_C) C1{ Fi:17 FL:9 Fc}



static void Test_BFu17i_BFu9ll_C()
{
  {
    init_simple_test("BFu17i_BFu9ll_C");
    static STRUCT_IF_C BFu17i_BFu9ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_C, BFu17i_BFu9ll_C)
//============================================================================


struct  BFu17i_BFu9ll_D  {
  unsigned int v1:17;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu17i_BFu9ll_D) C1{ Fi:17 FL:9 FL}



static void Test_BFu17i_BFu9ll_D()
{
  {
    init_simple_test("BFu17i_BFu9ll_D");
    static STRUCT_IF_C BFu17i_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_D, BFu17i_BFu9ll_D)
//============================================================================


struct  BFu17i_BFu9ll_F  {
  unsigned int v1:17;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu17i_BFu9ll_F) C1{ Fi:17 FL:9 Fi}



static void Test_BFu17i_BFu9ll_F()
{
  {
    init_simple_test("BFu17i_BFu9ll_F");
    static STRUCT_IF_C BFu17i_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_F, BFu17i_BFu9ll_F)
//============================================================================


struct  BFu17i_BFu9ll_I  {
  unsigned int v1:17;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu17i_BFu9ll_I) C1{ Fi:17 FL:9 Fi}



static void Test_BFu17i_BFu9ll_I()
{
  {
    init_simple_test("BFu17i_BFu9ll_I");
    static STRUCT_IF_C BFu17i_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_I, BFu17i_BFu9ll_I)
//============================================================================


struct  BFu17i_BFu9ll_Ip  {
  unsigned int v1:17;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu17i_BFu9ll_Ip) C1{ Fi:17 FL:9 Fp}



static void Test_BFu17i_BFu9ll_Ip()
{
  {
    init_simple_test("BFu17i_BFu9ll_Ip");
    static STRUCT_IF_C BFu17i_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Ip, BFu17i_BFu9ll_Ip)
//============================================================================


struct  BFu17i_BFu9ll_L  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu9ll_L) C1{ Fi:17 FL:9 FL}



static void Test_BFu17i_BFu9ll_L()
{
  {
    init_simple_test("BFu17i_BFu9ll_L");
    static STRUCT_IF_C BFu17i_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_L, BFu17i_BFu9ll_L)
//============================================================================


struct  BFu17i_BFu9ll_S  {
  unsigned int v1:17;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu17i_BFu9ll_S) C1{ Fi:17 FL:9 Fs}



static void Test_BFu17i_BFu9ll_S()
{
  {
    init_simple_test("BFu17i_BFu9ll_S");
    static STRUCT_IF_C BFu17i_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_S, BFu17i_BFu9ll_S)
//============================================================================


struct  BFu17i_BFu9ll_Uc  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu9ll_Uc) C1{ Fi:17 FL:9 Fc}



static void Test_BFu17i_BFu9ll_Uc()
{
  {
    init_simple_test("BFu17i_BFu9ll_Uc");
    static STRUCT_IF_C BFu17i_BFu9ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Uc, BFu17i_BFu9ll_Uc)
//============================================================================


struct  BFu17i_BFu9ll_Ui  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu9ll_Ui) C1{ Fi:17 FL:9 Fi}



static void Test_BFu17i_BFu9ll_Ui()
{
  {
    init_simple_test("BFu17i_BFu9ll_Ui");
    static STRUCT_IF_C BFu17i_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Ui, BFu17i_BFu9ll_Ui)
//============================================================================


struct  BFu17i_BFu9ll_Ul  {
  unsigned int v1:17;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu9ll_Ul) C1{ Fi:17 FL:9 FL}



static void Test_BFu17i_BFu9ll_Ul()
{
  {
    init_simple_test("BFu17i_BFu9ll_Ul");
    static STRUCT_IF_C BFu17i_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Ul, BFu17i_BFu9ll_Ul)
//============================================================================


struct  BFu17i_BFu9ll_Us  {
  unsigned int v1:17;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu9ll_Us) C1{ Fi:17 FL:9 Fs}



static void Test_BFu17i_BFu9ll_Us()
{
  {
    init_simple_test("BFu17i_BFu9ll_Us");
    static STRUCT_IF_C BFu17i_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Us, BFu17i_BFu9ll_Us)
//============================================================================


struct  BFu17i_BFu9ll_Vp  {
  unsigned int v1:17;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu17i_BFu9ll_Vp) C1{ Fi:17 FL:9 Fp}



static void Test_BFu17i_BFu9ll_Vp()
{
  {
    init_simple_test("BFu17i_BFu9ll_Vp");
    static STRUCT_IF_C BFu17i_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9ll_Vp, BFu17i_BFu9ll_Vp)
//============================================================================


struct  BFu17i_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:9;
};
//SIG(1 BFu17i_BFu9s) C1{ Fi:17 Fs:9}



static void Test_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu9s");
    static STRUCT_IF_C BFu17i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s, BFu17i_BFu9s)
//============================================================================


struct  BFu17i_BFu9s_BFu15i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu17i_BFu9s_BFu15i) C1{ Fi:17 Fs:9 Fi:15}



static void Test_BFu17i_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu15i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu15i, BFu17i_BFu9s_BFu15i)
//============================================================================


struct  BFu17i_BFu9s_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_BFu9s_BFu15ll) C1{ Fi:17 Fs:9 FL:15}



static void Test_BFu17i_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, 1, "BFu17i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, hide_ull(1LL<<14), "BFu17i_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu15ll, BFu17i_BFu9s_BFu15ll)
//============================================================================


struct  BFu17i_BFu9s_BFu15s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu17i_BFu9s_BFu15s) C1{ Fi:17 Fs:9 Fs:15}



static void Test_BFu17i_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu15s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu15s, BFu17i_BFu9s_BFu15s)
//============================================================================


struct  BFu17i_BFu9s_BFu16i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu17i_BFu9s_BFu16i) C1{ Fi:17 Fs:9 Fi:16}



static void Test_BFu17i_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu16i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu16i, BFu17i_BFu9s_BFu16i)
//============================================================================


struct  BFu17i_BFu9s_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_BFu9s_BFu16ll) C1{ Fi:17 Fs:9 FL:16}



static void Test_BFu17i_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, 1, "BFu17i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, hide_ull(1LL<<15), "BFu17i_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu16ll, BFu17i_BFu9s_BFu16ll)
//============================================================================


struct  BFu17i_BFu9s_BFu16s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu17i_BFu9s_BFu16s) C1{ Fi:17 Fs:9 Fs:16}



static void Test_BFu17i_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu16s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu16s, BFu17i_BFu9s_BFu16s)
//============================================================================


struct  BFu17i_BFu9s_BFu17i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu17i_BFu9s_BFu17i) C1{ Fi:17 Fs:9 Fi:17}



static void Test_BFu17i_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu17i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu17i, BFu17i_BFu9s_BFu17i)
//============================================================================


struct  BFu17i_BFu9s_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_BFu9s_BFu17ll) C1{ Fi:17 Fs:9 FL:17}



static void Test_BFu17i_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, 1, "BFu17i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu17ll, BFu17i_BFu9s_BFu17ll)
//============================================================================


struct  BFu17i_BFu9s_BFu1c  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu17i_BFu9s_BFu1c) C1{ Fi:17 Fs:9 Fc:1}



static void Test_BFu17i_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu1c");
    static STRUCT_IF_C BFu17i_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu1c, BFu17i_BFu9s_BFu1c)
//============================================================================


struct  BFu17i_BFu9s_BFu1i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu17i_BFu9s_BFu1i) C1{ Fi:17 Fs:9 Fi:1}



static void Test_BFu17i_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu1i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu1i, BFu17i_BFu9s_BFu1i)
//============================================================================


struct  BFu17i_BFu9s_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_BFu9s_BFu1ll) C1{ Fi:17 Fs:9 FL:1}



static void Test_BFu17i_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu1ll, BFu17i_BFu9s_BFu1ll)
//============================================================================


struct  BFu17i_BFu9s_BFu1s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu17i_BFu9s_BFu1s) C1{ Fi:17 Fs:9 Fs:1}



static void Test_BFu17i_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu1s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu9s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu17i_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu1s, BFu17i_BFu9s_BFu1s)
//============================================================================


struct  BFu17i_BFu9s_BFu31i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu17i_BFu9s_BFu31i) C1{ Fi:17 Fs:9 Fi:31}



static void Test_BFu17i_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu31i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu31i, BFu17i_BFu9s_BFu31i)
//============================================================================


struct  BFu17i_BFu9s_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_BFu9s_BFu31ll) C1{ Fi:17 Fs:9 FL:31}



static void Test_BFu17i_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, 1, "BFu17i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, hide_ull(1LL<<30), "BFu17i_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu31ll, BFu17i_BFu9s_BFu31ll)
//============================================================================


struct  BFu17i_BFu9s_BFu32i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu17i_BFu9s_BFu32i) C1{ Fi:17 Fs:9 Fi:32}



static void Test_BFu17i_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu32i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu32i, BFu17i_BFu9s_BFu32i)
//============================================================================


struct  BFu17i_BFu9s_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_BFu9s_BFu32ll) C1{ Fi:17 Fs:9 FL:32}



static void Test_BFu17i_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, 1, "BFu17i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, hide_ull(1LL<<31), "BFu17i_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu32ll, BFu17i_BFu9s_BFu32ll)
//============================================================================


struct  BFu17i_BFu9s_BFu33  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_BFu9s_BFu33) C1{ Fi:17 Fs:9 FL:33}



static void Test_BFu17i_BFu9s_BFu33()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu33");
    static STRUCT_IF_C BFu17i_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, 1, "BFu17i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, hide_ull(1LL<<32), "BFu17i_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu33, BFu17i_BFu9s_BFu33)
//============================================================================


struct  BFu17i_BFu9s_BFu7c  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu17i_BFu9s_BFu7c) C1{ Fi:17 Fs:9 Fc:7}



static void Test_BFu17i_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu7c");
    static STRUCT_IF_C BFu17i_BFu9s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu7c, BFu17i_BFu9s_BFu7c)
//============================================================================


struct  BFu17i_BFu9s_BFu7i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu17i_BFu9s_BFu7i) C1{ Fi:17 Fs:9 Fi:7}



static void Test_BFu17i_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu7i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu7i, BFu17i_BFu9s_BFu7i)
//============================================================================


struct  BFu17i_BFu9s_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_BFu9s_BFu7ll) C1{ Fi:17 Fs:9 FL:7}



static void Test_BFu17i_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, 1, "BFu17i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, hide_ull(1LL<<6), "BFu17i_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu7ll, BFu17i_BFu9s_BFu7ll)
//============================================================================


struct  BFu17i_BFu9s_BFu7s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu17i_BFu9s_BFu7s) C1{ Fi:17 Fs:9 Fs:7}



static void Test_BFu17i_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu7s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu7s, BFu17i_BFu9s_BFu7s)
//============================================================================


struct  BFu17i_BFu9s_BFu8c  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu17i_BFu9s_BFu8c) C1{ Fi:17 Fs:9 Fc:8}



static void Test_BFu17i_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu8c");
    static STRUCT_IF_C BFu17i_BFu9s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu8c, BFu17i_BFu9s_BFu8c)
//============================================================================


struct  BFu17i_BFu9s_BFu8i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu17i_BFu9s_BFu8i) C1{ Fi:17 Fs:9 Fi:8}



static void Test_BFu17i_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu8i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu8i, BFu17i_BFu9s_BFu8i)
//============================================================================


struct  BFu17i_BFu9s_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_BFu9s_BFu8ll) C1{ Fi:17 Fs:9 FL:8}



static void Test_BFu17i_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, 1, "BFu17i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, hide_ull(1LL<<7), "BFu17i_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu8ll, BFu17i_BFu9s_BFu8ll)
//============================================================================


struct  BFu17i_BFu9s_BFu8s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu17i_BFu9s_BFu8s) C1{ Fi:17 Fs:9 Fs:8}



static void Test_BFu17i_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu8s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu8s, BFu17i_BFu9s_BFu8s)
//============================================================================


struct  BFu17i_BFu9s_BFu9i  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu17i_BFu9s_BFu9i) C1{ Fi:17 Fs:9 Fi:9}



static void Test_BFu17i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu17i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu9i, BFu17i_BFu9s_BFu9i)
//============================================================================


struct  BFu17i_BFu9s_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_BFu9s_BFu9ll) C1{ Fi:17 Fs:9 FL:9}



static void Test_BFu17i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu17i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, 1, "BFu17i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu9ll, BFu17i_BFu9s_BFu9ll)
//============================================================================


struct  BFu17i_BFu9s_BFu9s  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu17i_BFu9s_BFu9s) C1{ Fi:17 Fs:9 Fs:9}



static void Test_BFu17i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu17i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu17i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_BFu9s, BFu17i_BFu9s_BFu9s)
//============================================================================


struct  BFu17i_BFu9s_C  {
  unsigned int v1:17;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu17i_BFu9s_C) C1{ Fi:17 Fs:9 Fc}



static void Test_BFu17i_BFu9s_C()
{
  {
    init_simple_test("BFu17i_BFu9s_C");
    static STRUCT_IF_C BFu17i_BFu9s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_C");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_C, BFu17i_BFu9s_C)
//============================================================================


struct  BFu17i_BFu9s_D  {
  unsigned int v1:17;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu17i_BFu9s_D) C1{ Fi:17 Fs:9 FL}



static void Test_BFu17i_BFu9s_D()
{
  {
    init_simple_test("BFu17i_BFu9s_D");
    static STRUCT_IF_C BFu17i_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_D, BFu17i_BFu9s_D)
//============================================================================


struct  BFu17i_BFu9s_F  {
  unsigned int v1:17;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu17i_BFu9s_F) C1{ Fi:17 Fs:9 Fi}



static void Test_BFu17i_BFu9s_F()
{
  {
    init_simple_test("BFu17i_BFu9s_F");
    static STRUCT_IF_C BFu17i_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_F, BFu17i_BFu9s_F)
//============================================================================


struct  BFu17i_BFu9s_I  {
  unsigned int v1:17;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu17i_BFu9s_I) C1{ Fi:17 Fs:9 Fi}



static void Test_BFu17i_BFu9s_I()
{
  {
    init_simple_test("BFu17i_BFu9s_I");
    static STRUCT_IF_C BFu17i_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_I, BFu17i_BFu9s_I)
//============================================================================


struct  BFu17i_BFu9s_Ip  {
  unsigned int v1:17;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu17i_BFu9s_Ip) C1{ Fi:17 Fs:9 Fp}



static void Test_BFu17i_BFu9s_Ip()
{
  {
    init_simple_test("BFu17i_BFu9s_Ip");
    static STRUCT_IF_C BFu17i_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Ip, BFu17i_BFu9s_Ip)
//============================================================================


struct  BFu17i_BFu9s_L  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu17i_BFu9s_L) C1{ Fi:17 Fs:9 FL}



static void Test_BFu17i_BFu9s_L()
{
  {
    init_simple_test("BFu17i_BFu9s_L");
    static STRUCT_IF_C BFu17i_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_L, BFu17i_BFu9s_L)
//============================================================================


struct  BFu17i_BFu9s_S  {
  unsigned int v1:17;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu17i_BFu9s_S) C1{ Fi:17 Fs:9 Fs}



static void Test_BFu17i_BFu9s_S()
{
  {
    init_simple_test("BFu17i_BFu9s_S");
    static STRUCT_IF_C BFu17i_BFu9s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_S");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_S, BFu17i_BFu9s_S)
//============================================================================


struct  BFu17i_BFu9s_Uc  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu17i_BFu9s_Uc) C1{ Fi:17 Fs:9 Fc}



static void Test_BFu17i_BFu9s_Uc()
{
  {
    init_simple_test("BFu17i_BFu9s_Uc");
    static STRUCT_IF_C BFu17i_BFu9s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Uc, BFu17i_BFu9s_Uc)
//============================================================================


struct  BFu17i_BFu9s_Ui  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu17i_BFu9s_Ui) C1{ Fi:17 Fs:9 Fi}



static void Test_BFu17i_BFu9s_Ui()
{
  {
    init_simple_test("BFu17i_BFu9s_Ui");
    static STRUCT_IF_C BFu17i_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Ui, BFu17i_BFu9s_Ui)
//============================================================================


struct  BFu17i_BFu9s_Ul  {
  unsigned int v1:17;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu17i_BFu9s_Ul) C1{ Fi:17 Fs:9 FL}



static void Test_BFu17i_BFu9s_Ul()
{
  {
    init_simple_test("BFu17i_BFu9s_Ul");
    static STRUCT_IF_C BFu17i_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Ul, BFu17i_BFu9s_Ul)
//============================================================================


struct  BFu17i_BFu9s_Us  {
  unsigned int v1:17;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu17i_BFu9s_Us) C1{ Fi:17 Fs:9 Fs}



static void Test_BFu17i_BFu9s_Us()
{
  {
    init_simple_test("BFu17i_BFu9s_Us");
    static STRUCT_IF_C BFu17i_BFu9s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Us");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Us, BFu17i_BFu9s_Us)
//============================================================================


struct  BFu17i_BFu9s_Vp  {
  unsigned int v1:17;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu17i_BFu9s_Vp) C1{ Fi:17 Fs:9 Fp}



static void Test_BFu17i_BFu9s_Vp()
{
  {
    init_simple_test("BFu17i_BFu9s_Vp");
    static STRUCT_IF_C BFu17i_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_BFu9s_Vp, BFu17i_BFu9s_Vp)
//============================================================================


struct  BFu17i_C  {
  unsigned int v1:17;
  char v2;
};
//SIG(1 BFu17i_C) C1{ Fi:17 Fc}



static void Test_BFu17i_C()
{
  {
    init_simple_test("BFu17i_C");
    static STRUCT_IF_C BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C");
    check_field_offset(lv, v2, 3, "BFu17i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C, BFu17i_C)
//============================================================================


struct  BFu17i_C_BFu15i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_C_BFu15i) C1{ Fi:17 Fc Fi:15}



static void Test_BFu17i_C_BFu15i()
{
  {
    init_simple_test("BFu17i_C_BFu15i");
    static STRUCT_IF_C BFu17i_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu15i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_C_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu15i, BFu17i_C_BFu15i)
//============================================================================


struct  BFu17i_C_BFu15ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_C_BFu15ll) C1{ Fi:17 Fc FL:15}



static void Test_BFu17i_C_BFu15ll()
{
  {
    init_simple_test("BFu17i_C_BFu15ll");
    static STRUCT_IF_C BFu17i_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu15ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_C_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu15ll, BFu17i_C_BFu15ll)
//============================================================================


struct  BFu17i_C_BFu15s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_C_BFu15s) C1{ Fi:17 Fc Fs:15}



static void Test_BFu17i_C_BFu15s()
{
  {
    init_simple_test("BFu17i_C_BFu15s");
    static STRUCT_IF_C BFu17i_C_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu15s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_C_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu15s, BFu17i_C_BFu15s)
//============================================================================


struct  BFu17i_C_BFu16i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_C_BFu16i) C1{ Fi:17 Fc Fi:16}



static void Test_BFu17i_C_BFu16i()
{
  {
    init_simple_test("BFu17i_C_BFu16i");
    static STRUCT_IF_C BFu17i_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu16i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_C_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu16i, BFu17i_C_BFu16i)
//============================================================================


struct  BFu17i_C_BFu16ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_C_BFu16ll) C1{ Fi:17 Fc FL:16}



static void Test_BFu17i_C_BFu16ll()
{
  {
    init_simple_test("BFu17i_C_BFu16ll");
    static STRUCT_IF_C BFu17i_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu16ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_C_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu16ll, BFu17i_C_BFu16ll)
//============================================================================


struct  BFu17i_C_BFu16s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_C_BFu16s) C1{ Fi:17 Fc Fs:16}



static void Test_BFu17i_C_BFu16s()
{
  {
    init_simple_test("BFu17i_C_BFu16s");
    static STRUCT_IF_C BFu17i_C_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu16s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_C_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu16s, BFu17i_C_BFu16s)
//============================================================================


struct  BFu17i_C_BFu17i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_C_BFu17i) C1{ Fi:17 Fc Fi:17}



static void Test_BFu17i_C_BFu17i()
{
  {
    init_simple_test("BFu17i_C_BFu17i");
    static STRUCT_IF_C BFu17i_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu17i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu17i, BFu17i_C_BFu17i)
//============================================================================


struct  BFu17i_C_BFu17ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_C_BFu17ll) C1{ Fi:17 Fc FL:17}



static void Test_BFu17i_C_BFu17ll()
{
  {
    init_simple_test("BFu17i_C_BFu17ll");
    static STRUCT_IF_C BFu17i_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu17ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_C_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu17ll, BFu17i_C_BFu17ll)
//============================================================================


struct  BFu17i_C_BFu1c  {
  unsigned int v1:17;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_C_BFu1c) C1{ Fi:17 Fc Fc:1}



static void Test_BFu17i_C_BFu1c()
{
  {
    init_simple_test("BFu17i_C_BFu1c");
    static STRUCT_IF_C BFu17i_C_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu1c");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu1c, BFu17i_C_BFu1c)
//============================================================================


struct  BFu17i_C_BFu1i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_C_BFu1i) C1{ Fi:17 Fc Fi:1}



static void Test_BFu17i_C_BFu1i()
{
  {
    init_simple_test("BFu17i_C_BFu1i");
    static STRUCT_IF_C BFu17i_C_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu1i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu1i, BFu17i_C_BFu1i)
//============================================================================


struct  BFu17i_C_BFu1ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_C_BFu1ll) C1{ Fi:17 Fc FL:1}



static void Test_BFu17i_C_BFu1ll()
{
  {
    init_simple_test("BFu17i_C_BFu1ll");
    static STRUCT_IF_C BFu17i_C_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu1ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu1ll, BFu17i_C_BFu1ll)
//============================================================================


struct  BFu17i_C_BFu1s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_C_BFu1s) C1{ Fi:17 Fc Fs:1}



static void Test_BFu17i_C_BFu1s()
{
  {
    init_simple_test("BFu17i_C_BFu1s");
    static STRUCT_IF_C BFu17i_C_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu1s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu1s, BFu17i_C_BFu1s)
//============================================================================


struct  BFu17i_C_BFu31i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_C_BFu31i) C1{ Fi:17 Fc Fi:31}



static void Test_BFu17i_C_BFu31i()
{
  {
    init_simple_test("BFu17i_C_BFu31i");
    static STRUCT_IF_C BFu17i_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu31i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu31i, BFu17i_C_BFu31i)
//============================================================================


struct  BFu17i_C_BFu31ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_C_BFu31ll) C1{ Fi:17 Fc FL:31}



static void Test_BFu17i_C_BFu31ll()
{
  {
    init_simple_test("BFu17i_C_BFu31ll");
    static STRUCT_IF_C BFu17i_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu31ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_C_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu31ll, BFu17i_C_BFu31ll)
//============================================================================


struct  BFu17i_C_BFu32i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_C_BFu32i) C1{ Fi:17 Fc Fi:32}



static void Test_BFu17i_C_BFu32i()
{
  {
    init_simple_test("BFu17i_C_BFu32i");
    static STRUCT_IF_C BFu17i_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu32i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu32i, BFu17i_C_BFu32i)
//============================================================================


struct  BFu17i_C_BFu32ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_C_BFu32ll) C1{ Fi:17 Fc FL:32}



static void Test_BFu17i_C_BFu32ll()
{
  {
    init_simple_test("BFu17i_C_BFu32ll");
    static STRUCT_IF_C BFu17i_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu32ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_C_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu32ll, BFu17i_C_BFu32ll)
//============================================================================


struct  BFu17i_C_BFu33  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_C_BFu33) C1{ Fi:17 Fc FL:33}



static void Test_BFu17i_C_BFu33()
{
  {
    init_simple_test("BFu17i_C_BFu33");
    static STRUCT_IF_C BFu17i_C_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu33");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_C_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu33, BFu17i_C_BFu33)
//============================================================================


struct  BFu17i_C_BFu7c  {
  unsigned int v1:17;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_C_BFu7c) C1{ Fi:17 Fc Fc:7}



static void Test_BFu17i_C_BFu7c()
{
  {
    init_simple_test("BFu17i_C_BFu7c");
    static STRUCT_IF_C BFu17i_C_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu7c");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_C_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu7c, BFu17i_C_BFu7c)
//============================================================================


struct  BFu17i_C_BFu7i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_C_BFu7i) C1{ Fi:17 Fc Fi:7}



static void Test_BFu17i_C_BFu7i()
{
  {
    init_simple_test("BFu17i_C_BFu7i");
    static STRUCT_IF_C BFu17i_C_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu7i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_C_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu7i, BFu17i_C_BFu7i)
//============================================================================


struct  BFu17i_C_BFu7ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_C_BFu7ll) C1{ Fi:17 Fc FL:7}



static void Test_BFu17i_C_BFu7ll()
{
  {
    init_simple_test("BFu17i_C_BFu7ll");
    static STRUCT_IF_C BFu17i_C_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu7ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_C_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu7ll, BFu17i_C_BFu7ll)
//============================================================================


struct  BFu17i_C_BFu7s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_C_BFu7s) C1{ Fi:17 Fc Fs:7}



static void Test_BFu17i_C_BFu7s()
{
  {
    init_simple_test("BFu17i_C_BFu7s");
    static STRUCT_IF_C BFu17i_C_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu7s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_C_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu7s, BFu17i_C_BFu7s)
//============================================================================


struct  BFu17i_C_BFu8c  {
  unsigned int v1:17;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_C_BFu8c) C1{ Fi:17 Fc Fc:8}



static void Test_BFu17i_C_BFu8c()
{
  {
    init_simple_test("BFu17i_C_BFu8c");
    static STRUCT_IF_C BFu17i_C_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu8c");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_C_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu8c, BFu17i_C_BFu8c)
//============================================================================


struct  BFu17i_C_BFu8i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_C_BFu8i) C1{ Fi:17 Fc Fi:8}



static void Test_BFu17i_C_BFu8i()
{
  {
    init_simple_test("BFu17i_C_BFu8i");
    static STRUCT_IF_C BFu17i_C_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu8i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_C_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu8i, BFu17i_C_BFu8i)
//============================================================================


struct  BFu17i_C_BFu8ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_C_BFu8ll) C1{ Fi:17 Fc FL:8}



static void Test_BFu17i_C_BFu8ll()
{
  {
    init_simple_test("BFu17i_C_BFu8ll");
    static STRUCT_IF_C BFu17i_C_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu8ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_C_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu8ll, BFu17i_C_BFu8ll)
//============================================================================


struct  BFu17i_C_BFu8s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_C_BFu8s) C1{ Fi:17 Fc Fs:8}



static void Test_BFu17i_C_BFu8s()
{
  {
    init_simple_test("BFu17i_C_BFu8s");
    static STRUCT_IF_C BFu17i_C_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu8s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_C_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu8s, BFu17i_C_BFu8s)
//============================================================================


struct  BFu17i_C_BFu9i  {
  unsigned int v1:17;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_C_BFu9i) C1{ Fi:17 Fc Fi:9}



static void Test_BFu17i_C_BFu9i()
{
  {
    init_simple_test("BFu17i_C_BFu9i");
    static STRUCT_IF_C BFu17i_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu9i");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_C_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu9i, BFu17i_C_BFu9i)
//============================================================================


struct  BFu17i_C_BFu9ll  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_C_BFu9ll) C1{ Fi:17 Fc FL:9}



static void Test_BFu17i_C_BFu9ll()
{
  {
    init_simple_test("BFu17i_C_BFu9ll");
    static STRUCT_IF_C BFu17i_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu9ll");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_C_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu9ll, BFu17i_C_BFu9ll)
//============================================================================


struct  BFu17i_C_BFu9s  {
  unsigned int v1:17;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_C_BFu9s) C1{ Fi:17 Fc Fs:9}



static void Test_BFu17i_C_BFu9s()
{
  {
    init_simple_test("BFu17i_C_BFu9s");
    static STRUCT_IF_C BFu17i_C_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_BFu9s");
    check_field_offset(lv, v2, 3, "BFu17i_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_C_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_BFu9s, BFu17i_C_BFu9s)
//============================================================================


struct  BFu17i_C_C  {
  unsigned int v1:17;
  char v2;
  char v3;
};
//SIG(1 BFu17i_C_C) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_C_C()
{
  {
    init_simple_test("BFu17i_C_C");
    static STRUCT_IF_C BFu17i_C_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_C");
    check_field_offset(lv, v2, 3, "BFu17i_C_C.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_C, BFu17i_C_C)
//============================================================================


struct  BFu17i_C_D  {
  unsigned int v1:17;
  char v2;
  double v3;
};
//SIG(1 BFu17i_C_D) C1{ Fi:17 Fc FL}



static void Test_BFu17i_C_D()
{
  {
    init_simple_test("BFu17i_C_D");
    static STRUCT_IF_C BFu17i_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_D");
    check_field_offset(lv, v2, 3, "BFu17i_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_D, BFu17i_C_D)
//============================================================================


struct  BFu17i_C_F  {
  unsigned int v1:17;
  char v2;
  float v3;
};
//SIG(1 BFu17i_C_F) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_C_F()
{
  {
    init_simple_test("BFu17i_C_F");
    static STRUCT_IF_C BFu17i_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_F");
    check_field_offset(lv, v2, 3, "BFu17i_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_F, BFu17i_C_F)
//============================================================================


struct  BFu17i_C_I  {
  unsigned int v1:17;
  char v2;
  int v3;
};
//SIG(1 BFu17i_C_I) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_C_I()
{
  {
    init_simple_test("BFu17i_C_I");
    static STRUCT_IF_C BFu17i_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_I");
    check_field_offset(lv, v2, 3, "BFu17i_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_I, BFu17i_C_I)
//============================================================================


struct  BFu17i_C_Ip  {
  unsigned int v1:17;
  char v2;
  int *v3;
};
//SIG(1 BFu17i_C_Ip) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_C_Ip()
{
  {
    init_simple_test("BFu17i_C_Ip");
    static STRUCT_IF_C BFu17i_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Ip");
    check_field_offset(lv, v2, 3, "BFu17i_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Ip, BFu17i_C_Ip)
//============================================================================


struct  BFu17i_C_L  {
  unsigned int v1:17;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_C_L) C1{ Fi:17 Fc FL}



static void Test_BFu17i_C_L()
{
  {
    init_simple_test("BFu17i_C_L");
    static STRUCT_IF_C BFu17i_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_L");
    check_field_offset(lv, v2, 3, "BFu17i_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_L, BFu17i_C_L)
//============================================================================


struct  BFu17i_C_S  {
  unsigned int v1:17;
  char v2;
  short v3;
};
//SIG(1 BFu17i_C_S) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_C_S()
{
  {
    init_simple_test("BFu17i_C_S");
    static STRUCT_IF_C BFu17i_C_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_S");
    check_field_offset(lv, v2, 3, "BFu17i_C_S.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_S, BFu17i_C_S)
//============================================================================


struct  BFu17i_C_Uc  {
  unsigned int v1:17;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu17i_C_Uc) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_C_Uc()
{
  {
    init_simple_test("BFu17i_C_Uc");
    static STRUCT_IF_C BFu17i_C_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Uc");
    check_field_offset(lv, v2, 3, "BFu17i_C_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Uc, BFu17i_C_Uc)
//============================================================================


struct  BFu17i_C_Ui  {
  unsigned int v1:17;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu17i_C_Ui) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_C_Ui()
{
  {
    init_simple_test("BFu17i_C_Ui");
    static STRUCT_IF_C BFu17i_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Ui");
    check_field_offset(lv, v2, 3, "BFu17i_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Ui, BFu17i_C_Ui)
//============================================================================


struct  BFu17i_C_Ul  {
  unsigned int v1:17;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_C_Ul) C1{ Fi:17 Fc FL}



static void Test_BFu17i_C_Ul()
{
  {
    init_simple_test("BFu17i_C_Ul");
    static STRUCT_IF_C BFu17i_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Ul");
    check_field_offset(lv, v2, 3, "BFu17i_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Ul, BFu17i_C_Ul)
//============================================================================


struct  BFu17i_C_Us  {
  unsigned int v1:17;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu17i_C_Us) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_C_Us()
{
  {
    init_simple_test("BFu17i_C_Us");
    static STRUCT_IF_C BFu17i_C_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Us");
    check_field_offset(lv, v2, 3, "BFu17i_C_Us.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Us, BFu17i_C_Us)
//============================================================================


struct  BFu17i_C_Vp  {
  unsigned int v1:17;
  char v2;
  void *v3;
};
//SIG(1 BFu17i_C_Vp) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_C_Vp()
{
  {
    init_simple_test("BFu17i_C_Vp");
    static STRUCT_IF_C BFu17i_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_Vp");
    check_field_offset(lv, v2, 3, "BFu17i_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_C_Vp, BFu17i_C_Vp)
//============================================================================


struct  BFu17i_D  {
  unsigned int v1:17;
  double v2;
};
//SIG(1 BFu17i_D) C1{ Fi:17 FL}



static void Test_BFu17i_D()
{
  {
    init_simple_test("BFu17i_D");
    static STRUCT_IF_C BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D, BFu17i_D)
//============================================================================


struct  BFu17i_D_BFu15i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_D_BFu15i) C1{ Fi:17 FL Fi:15}



static void Test_BFu17i_D_BFu15i()
{
  {
    init_simple_test("BFu17i_D_BFu15i");
    static STRUCT_IF_C BFu17i_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu15i, BFu17i_D_BFu15i)
//============================================================================


struct  BFu17i_D_BFu15ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_D_BFu15ll) C1{ Fi:17 FL FL:15}



static void Test_BFu17i_D_BFu15ll()
{
  {
    init_simple_test("BFu17i_D_BFu15ll");
    static STRUCT_IF_C BFu17i_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu15ll, BFu17i_D_BFu15ll)
//============================================================================


struct  BFu17i_D_BFu15s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_D_BFu15s) C1{ Fi:17 FL Fs:15}



static void Test_BFu17i_D_BFu15s()
{
  {
    init_simple_test("BFu17i_D_BFu15s");
    static STRUCT_IF_C BFu17i_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu15s, BFu17i_D_BFu15s)
//============================================================================


struct  BFu17i_D_BFu16i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_D_BFu16i) C1{ Fi:17 FL Fi:16}



static void Test_BFu17i_D_BFu16i()
{
  {
    init_simple_test("BFu17i_D_BFu16i");
    static STRUCT_IF_C BFu17i_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu16i, BFu17i_D_BFu16i)
//============================================================================


struct  BFu17i_D_BFu16ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_D_BFu16ll) C1{ Fi:17 FL FL:16}



static void Test_BFu17i_D_BFu16ll()
{
  {
    init_simple_test("BFu17i_D_BFu16ll");
    static STRUCT_IF_C BFu17i_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu16ll, BFu17i_D_BFu16ll)
//============================================================================


struct  BFu17i_D_BFu16s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_D_BFu16s) C1{ Fi:17 FL Fs:16}



static void Test_BFu17i_D_BFu16s()
{
  {
    init_simple_test("BFu17i_D_BFu16s");
    static STRUCT_IF_C BFu17i_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu16s, BFu17i_D_BFu16s)
//============================================================================


struct  BFu17i_D_BFu17i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_D_BFu17i) C1{ Fi:17 FL Fi:17}



static void Test_BFu17i_D_BFu17i()
{
  {
    init_simple_test("BFu17i_D_BFu17i");
    static STRUCT_IF_C BFu17i_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu17i, BFu17i_D_BFu17i)
//============================================================================


struct  BFu17i_D_BFu17ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_D_BFu17ll) C1{ Fi:17 FL FL:17}



static void Test_BFu17i_D_BFu17ll()
{
  {
    init_simple_test("BFu17i_D_BFu17ll");
    static STRUCT_IF_C BFu17i_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu17ll, BFu17i_D_BFu17ll)
//============================================================================


struct  BFu17i_D_BFu1c  {
  unsigned int v1:17;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_D_BFu1c) C1{ Fi:17 FL Fc:1}



static void Test_BFu17i_D_BFu1c()
{
  {
    init_simple_test("BFu17i_D_BFu1c");
    static STRUCT_IF_C BFu17i_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu1c, BFu17i_D_BFu1c)
//============================================================================


struct  BFu17i_D_BFu1i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_D_BFu1i) C1{ Fi:17 FL Fi:1}



static void Test_BFu17i_D_BFu1i()
{
  {
    init_simple_test("BFu17i_D_BFu1i");
    static STRUCT_IF_C BFu17i_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu1i, BFu17i_D_BFu1i)
//============================================================================


struct  BFu17i_D_BFu1ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_D_BFu1ll) C1{ Fi:17 FL FL:1}



static void Test_BFu17i_D_BFu1ll()
{
  {
    init_simple_test("BFu17i_D_BFu1ll");
    static STRUCT_IF_C BFu17i_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu1ll, BFu17i_D_BFu1ll)
//============================================================================


struct  BFu17i_D_BFu1s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_D_BFu1s) C1{ Fi:17 FL Fs:1}



static void Test_BFu17i_D_BFu1s()
{
  {
    init_simple_test("BFu17i_D_BFu1s");
    static STRUCT_IF_C BFu17i_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu1s, BFu17i_D_BFu1s)
//============================================================================


struct  BFu17i_D_BFu31i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_D_BFu31i) C1{ Fi:17 FL Fi:31}



static void Test_BFu17i_D_BFu31i()
{
  {
    init_simple_test("BFu17i_D_BFu31i");
    static STRUCT_IF_C BFu17i_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu31i, BFu17i_D_BFu31i)
//============================================================================


struct  BFu17i_D_BFu31ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_D_BFu31ll) C1{ Fi:17 FL FL:31}



static void Test_BFu17i_D_BFu31ll()
{
  {
    init_simple_test("BFu17i_D_BFu31ll");
    static STRUCT_IF_C BFu17i_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu31ll, BFu17i_D_BFu31ll)
//============================================================================


struct  BFu17i_D_BFu32i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_D_BFu32i) C1{ Fi:17 FL Fi:32}



static void Test_BFu17i_D_BFu32i()
{
  {
    init_simple_test("BFu17i_D_BFu32i");
    static STRUCT_IF_C BFu17i_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu32i, BFu17i_D_BFu32i)
//============================================================================


struct  BFu17i_D_BFu32ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_D_BFu32ll) C1{ Fi:17 FL FL:32}



static void Test_BFu17i_D_BFu32ll()
{
  {
    init_simple_test("BFu17i_D_BFu32ll");
    static STRUCT_IF_C BFu17i_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu32ll, BFu17i_D_BFu32ll)
//============================================================================


struct  BFu17i_D_BFu33  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_D_BFu33) C1{ Fi:17 FL FL:33}



static void Test_BFu17i_D_BFu33()
{
  {
    init_simple_test("BFu17i_D_BFu33");
    static STRUCT_IF_C BFu17i_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu17i_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu17i_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu33, BFu17i_D_BFu33)
//============================================================================


struct  BFu17i_D_BFu7c  {
  unsigned int v1:17;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_D_BFu7c) C1{ Fi:17 FL Fc:7}



static void Test_BFu17i_D_BFu7c()
{
  {
    init_simple_test("BFu17i_D_BFu7c");
    static STRUCT_IF_C BFu17i_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu7c, BFu17i_D_BFu7c)
//============================================================================


struct  BFu17i_D_BFu7i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_D_BFu7i) C1{ Fi:17 FL Fi:7}



static void Test_BFu17i_D_BFu7i()
{
  {
    init_simple_test("BFu17i_D_BFu7i");
    static STRUCT_IF_C BFu17i_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu7i, BFu17i_D_BFu7i)
//============================================================================


struct  BFu17i_D_BFu7ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_D_BFu7ll) C1{ Fi:17 FL FL:7}



static void Test_BFu17i_D_BFu7ll()
{
  {
    init_simple_test("BFu17i_D_BFu7ll");
    static STRUCT_IF_C BFu17i_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu7ll, BFu17i_D_BFu7ll)
//============================================================================


struct  BFu17i_D_BFu7s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_D_BFu7s) C1{ Fi:17 FL Fs:7}



static void Test_BFu17i_D_BFu7s()
{
  {
    init_simple_test("BFu17i_D_BFu7s");
    static STRUCT_IF_C BFu17i_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu7s, BFu17i_D_BFu7s)
//============================================================================


struct  BFu17i_D_BFu8c  {
  unsigned int v1:17;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_D_BFu8c) C1{ Fi:17 FL Fc:8}



static void Test_BFu17i_D_BFu8c()
{
  {
    init_simple_test("BFu17i_D_BFu8c");
    static STRUCT_IF_C BFu17i_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu8c, BFu17i_D_BFu8c)
//============================================================================


struct  BFu17i_D_BFu8i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_D_BFu8i) C1{ Fi:17 FL Fi:8}



static void Test_BFu17i_D_BFu8i()
{
  {
    init_simple_test("BFu17i_D_BFu8i");
    static STRUCT_IF_C BFu17i_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu8i, BFu17i_D_BFu8i)
//============================================================================


struct  BFu17i_D_BFu8ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_D_BFu8ll) C1{ Fi:17 FL FL:8}



static void Test_BFu17i_D_BFu8ll()
{
  {
    init_simple_test("BFu17i_D_BFu8ll");
    static STRUCT_IF_C BFu17i_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu8ll, BFu17i_D_BFu8ll)
//============================================================================


struct  BFu17i_D_BFu8s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_D_BFu8s) C1{ Fi:17 FL Fs:8}



static void Test_BFu17i_D_BFu8s()
{
  {
    init_simple_test("BFu17i_D_BFu8s");
    static STRUCT_IF_C BFu17i_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu8s, BFu17i_D_BFu8s)
//============================================================================


struct  BFu17i_D_BFu9i  {
  unsigned int v1:17;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_D_BFu9i) C1{ Fi:17 FL Fi:9}



static void Test_BFu17i_D_BFu9i()
{
  {
    init_simple_test("BFu17i_D_BFu9i");
    static STRUCT_IF_C BFu17i_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu9i, BFu17i_D_BFu9i)
//============================================================================


struct  BFu17i_D_BFu9ll  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_D_BFu9ll) C1{ Fi:17 FL FL:9}



static void Test_BFu17i_D_BFu9ll()
{
  {
    init_simple_test("BFu17i_D_BFu9ll");
    static STRUCT_IF_C BFu17i_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu9ll, BFu17i_D_BFu9ll)
//============================================================================


struct  BFu17i_D_BFu9s  {
  unsigned int v1:17;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_D_BFu9s) C1{ Fi:17 FL Fs:9}



static void Test_BFu17i_D_BFu9s()
{
  {
    init_simple_test("BFu17i_D_BFu9s");
    static STRUCT_IF_C BFu17i_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_BFu9s, BFu17i_D_BFu9s)
//============================================================================


struct  BFu17i_D_C  {
  unsigned int v1:17;
  double v2;
  char v3;
};
//SIG(1 BFu17i_D_C) C1{ Fi:17 FL Fc}



static void Test_BFu17i_D_C()
{
  {
    init_simple_test("BFu17i_D_C");
    static STRUCT_IF_C BFu17i_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_C, BFu17i_D_C)
//============================================================================


struct  BFu17i_D_D  {
  unsigned int v1:17;
  double v2;
  double v3;
};
//SIG(1 BFu17i_D_D) C1{ Fi:17 FL[2]}



static void Test_BFu17i_D_D()
{
  {
    init_simple_test("BFu17i_D_D");
    static STRUCT_IF_C BFu17i_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_D, BFu17i_D_D)
//============================================================================


struct  BFu17i_D_F  {
  unsigned int v1:17;
  double v2;
  float v3;
};
//SIG(1 BFu17i_D_F) C1{ Fi:17 FL Fi}



static void Test_BFu17i_D_F()
{
  {
    init_simple_test("BFu17i_D_F");
    static STRUCT_IF_C BFu17i_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_F, BFu17i_D_F)
//============================================================================


struct  BFu17i_D_I  {
  unsigned int v1:17;
  double v2;
  int v3;
};
//SIG(1 BFu17i_D_I) C1{ Fi:17 FL Fi}



static void Test_BFu17i_D_I()
{
  {
    init_simple_test("BFu17i_D_I");
    static STRUCT_IF_C BFu17i_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_I, BFu17i_D_I)
//============================================================================


struct  BFu17i_D_Ip  {
  unsigned int v1:17;
  double v2;
  int *v3;
};
//SIG(1 BFu17i_D_Ip) C1{ Fi:17 FL Fp}



static void Test_BFu17i_D_Ip()
{
  {
    init_simple_test("BFu17i_D_Ip");
    static STRUCT_IF_C BFu17i_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Ip, BFu17i_D_Ip)
//============================================================================


struct  BFu17i_D_L  {
  unsigned int v1:17;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_D_L) C1{ Fi:17 FL[2]}



static void Test_BFu17i_D_L()
{
  {
    init_simple_test("BFu17i_D_L");
    static STRUCT_IF_C BFu17i_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_L, BFu17i_D_L)
//============================================================================


struct  BFu17i_D_S  {
  unsigned int v1:17;
  double v2;
  short v3;
};
//SIG(1 BFu17i_D_S) C1{ Fi:17 FL Fs}



static void Test_BFu17i_D_S()
{
  {
    init_simple_test("BFu17i_D_S");
    static STRUCT_IF_C BFu17i_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_S, BFu17i_D_S)
//============================================================================


struct  BFu17i_D_Uc  {
  unsigned int v1:17;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu17i_D_Uc) C1{ Fi:17 FL Fc}



static void Test_BFu17i_D_Uc()
{
  {
    init_simple_test("BFu17i_D_Uc");
    static STRUCT_IF_C BFu17i_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Uc, BFu17i_D_Uc)
//============================================================================


struct  BFu17i_D_Ui  {
  unsigned int v1:17;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu17i_D_Ui) C1{ Fi:17 FL Fi}



static void Test_BFu17i_D_Ui()
{
  {
    init_simple_test("BFu17i_D_Ui");
    static STRUCT_IF_C BFu17i_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Ui, BFu17i_D_Ui)
//============================================================================


struct  BFu17i_D_Ul  {
  unsigned int v1:17;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_D_Ul) C1{ Fi:17 FL[2]}



static void Test_BFu17i_D_Ul()
{
  {
    init_simple_test("BFu17i_D_Ul");
    static STRUCT_IF_C BFu17i_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Ul, BFu17i_D_Ul)
//============================================================================


struct  BFu17i_D_Us  {
  unsigned int v1:17;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu17i_D_Us) C1{ Fi:17 FL Fs}



static void Test_BFu17i_D_Us()
{
  {
    init_simple_test("BFu17i_D_Us");
    static STRUCT_IF_C BFu17i_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Us, BFu17i_D_Us)
//============================================================================


struct  BFu17i_D_Vp  {
  unsigned int v1:17;
  double v2;
  void *v3;
};
//SIG(1 BFu17i_D_Vp) C1{ Fi:17 FL Fp}



static void Test_BFu17i_D_Vp()
{
  {
    init_simple_test("BFu17i_D_Vp");
    static STRUCT_IF_C BFu17i_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_D_Vp, BFu17i_D_Vp)
//============================================================================


struct  BFu17i_F  {
  unsigned int v1:17;
  float v2;
};
//SIG(1 BFu17i_F) C1{ Fi:17 Fi}



static void Test_BFu17i_F()
{
  {
    init_simple_test("BFu17i_F");
    static STRUCT_IF_C BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F");
    check_field_offset(lv, v2, 4, "BFu17i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F, BFu17i_F)
//============================================================================


struct  BFu17i_F_BFu15i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_F_BFu15i) C1{ Fi:17 Fi Fi:15}



static void Test_BFu17i_F_BFu15i()
{
  {
    init_simple_test("BFu17i_F_BFu15i");
    static STRUCT_IF_C BFu17i_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu15i, BFu17i_F_BFu15i)
//============================================================================


struct  BFu17i_F_BFu15ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_F_BFu15ll) C1{ Fi:17 Fi FL:15}



static void Test_BFu17i_F_BFu15ll()
{
  {
    init_simple_test("BFu17i_F_BFu15ll");
    static STRUCT_IF_C BFu17i_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu15ll, BFu17i_F_BFu15ll)
//============================================================================


struct  BFu17i_F_BFu15s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_F_BFu15s) C1{ Fi:17 Fi Fs:15}



static void Test_BFu17i_F_BFu15s()
{
  {
    init_simple_test("BFu17i_F_BFu15s");
    static STRUCT_IF_C BFu17i_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu15s, BFu17i_F_BFu15s)
//============================================================================


struct  BFu17i_F_BFu16i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_F_BFu16i) C1{ Fi:17 Fi Fi:16}



static void Test_BFu17i_F_BFu16i()
{
  {
    init_simple_test("BFu17i_F_BFu16i");
    static STRUCT_IF_C BFu17i_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu16i, BFu17i_F_BFu16i)
//============================================================================


struct  BFu17i_F_BFu16ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_F_BFu16ll) C1{ Fi:17 Fi FL:16}



static void Test_BFu17i_F_BFu16ll()
{
  {
    init_simple_test("BFu17i_F_BFu16ll");
    static STRUCT_IF_C BFu17i_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu16ll, BFu17i_F_BFu16ll)
//============================================================================


struct  BFu17i_F_BFu16s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_F_BFu16s) C1{ Fi:17 Fi Fs:16}



static void Test_BFu17i_F_BFu16s()
{
  {
    init_simple_test("BFu17i_F_BFu16s");
    static STRUCT_IF_C BFu17i_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu16s, BFu17i_F_BFu16s)
//============================================================================


struct  BFu17i_F_BFu17i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_F_BFu17i) C1{ Fi:17 Fi Fi:17}



static void Test_BFu17i_F_BFu17i()
{
  {
    init_simple_test("BFu17i_F_BFu17i");
    static STRUCT_IF_C BFu17i_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu17i, BFu17i_F_BFu17i)
//============================================================================


struct  BFu17i_F_BFu17ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_F_BFu17ll) C1{ Fi:17 Fi FL:17}



static void Test_BFu17i_F_BFu17ll()
{
  {
    init_simple_test("BFu17i_F_BFu17ll");
    static STRUCT_IF_C BFu17i_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu17ll, BFu17i_F_BFu17ll)
//============================================================================


struct  BFu17i_F_BFu1c  {
  unsigned int v1:17;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_F_BFu1c) C1{ Fi:17 Fi Fc:1}



static void Test_BFu17i_F_BFu1c()
{
  {
    init_simple_test("BFu17i_F_BFu1c");
    static STRUCT_IF_C BFu17i_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu1c, BFu17i_F_BFu1c)
//============================================================================


struct  BFu17i_F_BFu1i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_F_BFu1i) C1{ Fi:17 Fi Fi:1}



static void Test_BFu17i_F_BFu1i()
{
  {
    init_simple_test("BFu17i_F_BFu1i");
    static STRUCT_IF_C BFu17i_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu1i, BFu17i_F_BFu1i)
//============================================================================


struct  BFu17i_F_BFu1ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_F_BFu1ll) C1{ Fi:17 Fi FL:1}



static void Test_BFu17i_F_BFu1ll()
{
  {
    init_simple_test("BFu17i_F_BFu1ll");
    static STRUCT_IF_C BFu17i_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu1ll, BFu17i_F_BFu1ll)
//============================================================================


struct  BFu17i_F_BFu1s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_F_BFu1s) C1{ Fi:17 Fi Fs:1}



static void Test_BFu17i_F_BFu1s()
{
  {
    init_simple_test("BFu17i_F_BFu1s");
    static STRUCT_IF_C BFu17i_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu1s, BFu17i_F_BFu1s)
//============================================================================


struct  BFu17i_F_BFu31i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_F_BFu31i) C1{ Fi:17 Fi Fi:31}



static void Test_BFu17i_F_BFu31i()
{
  {
    init_simple_test("BFu17i_F_BFu31i");
    static STRUCT_IF_C BFu17i_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu31i, BFu17i_F_BFu31i)
//============================================================================


struct  BFu17i_F_BFu31ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_F_BFu31ll) C1{ Fi:17 Fi FL:31}



static void Test_BFu17i_F_BFu31ll()
{
  {
    init_simple_test("BFu17i_F_BFu31ll");
    static STRUCT_IF_C BFu17i_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu31ll, BFu17i_F_BFu31ll)
//============================================================================


struct  BFu17i_F_BFu32i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_F_BFu32i) C1{ Fi:17 Fi Fi:32}



static void Test_BFu17i_F_BFu32i()
{
  {
    init_simple_test("BFu17i_F_BFu32i");
    static STRUCT_IF_C BFu17i_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu32i, BFu17i_F_BFu32i)
//============================================================================


struct  BFu17i_F_BFu32ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_F_BFu32ll) C1{ Fi:17 Fi FL:32}



static void Test_BFu17i_F_BFu32ll()
{
  {
    init_simple_test("BFu17i_F_BFu32ll");
    static STRUCT_IF_C BFu17i_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu32ll, BFu17i_F_BFu32ll)
//============================================================================


struct  BFu17i_F_BFu33  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_F_BFu33) C1{ Fi:17 Fi FL:33}



static void Test_BFu17i_F_BFu33()
{
  {
    init_simple_test("BFu17i_F_BFu33");
    static STRUCT_IF_C BFu17i_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu17i_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu17i_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu33, BFu17i_F_BFu33)
//============================================================================


struct  BFu17i_F_BFu7c  {
  unsigned int v1:17;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_F_BFu7c) C1{ Fi:17 Fi Fc:7}



static void Test_BFu17i_F_BFu7c()
{
  {
    init_simple_test("BFu17i_F_BFu7c");
    static STRUCT_IF_C BFu17i_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu7c, BFu17i_F_BFu7c)
//============================================================================


struct  BFu17i_F_BFu7i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_F_BFu7i) C1{ Fi:17 Fi Fi:7}



static void Test_BFu17i_F_BFu7i()
{
  {
    init_simple_test("BFu17i_F_BFu7i");
    static STRUCT_IF_C BFu17i_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu7i, BFu17i_F_BFu7i)
//============================================================================


struct  BFu17i_F_BFu7ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_F_BFu7ll) C1{ Fi:17 Fi FL:7}



static void Test_BFu17i_F_BFu7ll()
{
  {
    init_simple_test("BFu17i_F_BFu7ll");
    static STRUCT_IF_C BFu17i_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu7ll, BFu17i_F_BFu7ll)
//============================================================================


struct  BFu17i_F_BFu7s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_F_BFu7s) C1{ Fi:17 Fi Fs:7}



static void Test_BFu17i_F_BFu7s()
{
  {
    init_simple_test("BFu17i_F_BFu7s");
    static STRUCT_IF_C BFu17i_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu7s, BFu17i_F_BFu7s)
//============================================================================


struct  BFu17i_F_BFu8c  {
  unsigned int v1:17;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_F_BFu8c) C1{ Fi:17 Fi Fc:8}



static void Test_BFu17i_F_BFu8c()
{
  {
    init_simple_test("BFu17i_F_BFu8c");
    static STRUCT_IF_C BFu17i_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu8c, BFu17i_F_BFu8c)
//============================================================================


struct  BFu17i_F_BFu8i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_F_BFu8i) C1{ Fi:17 Fi Fi:8}



static void Test_BFu17i_F_BFu8i()
{
  {
    init_simple_test("BFu17i_F_BFu8i");
    static STRUCT_IF_C BFu17i_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu8i, BFu17i_F_BFu8i)
//============================================================================


struct  BFu17i_F_BFu8ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_F_BFu8ll) C1{ Fi:17 Fi FL:8}



static void Test_BFu17i_F_BFu8ll()
{
  {
    init_simple_test("BFu17i_F_BFu8ll");
    static STRUCT_IF_C BFu17i_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu8ll, BFu17i_F_BFu8ll)
//============================================================================


struct  BFu17i_F_BFu8s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_F_BFu8s) C1{ Fi:17 Fi Fs:8}



static void Test_BFu17i_F_BFu8s()
{
  {
    init_simple_test("BFu17i_F_BFu8s");
    static STRUCT_IF_C BFu17i_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu8s, BFu17i_F_BFu8s)
//============================================================================


struct  BFu17i_F_BFu9i  {
  unsigned int v1:17;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_F_BFu9i) C1{ Fi:17 Fi Fi:9}



static void Test_BFu17i_F_BFu9i()
{
  {
    init_simple_test("BFu17i_F_BFu9i");
    static STRUCT_IF_C BFu17i_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu9i, BFu17i_F_BFu9i)
//============================================================================


struct  BFu17i_F_BFu9ll  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_F_BFu9ll) C1{ Fi:17 Fi FL:9}



static void Test_BFu17i_F_BFu9ll()
{
  {
    init_simple_test("BFu17i_F_BFu9ll");
    static STRUCT_IF_C BFu17i_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu9ll, BFu17i_F_BFu9ll)
//============================================================================


struct  BFu17i_F_BFu9s  {
  unsigned int v1:17;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_F_BFu9s) C1{ Fi:17 Fi Fs:9}



static void Test_BFu17i_F_BFu9s()
{
  {
    init_simple_test("BFu17i_F_BFu9s");
    static STRUCT_IF_C BFu17i_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu17i_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_BFu9s, BFu17i_F_BFu9s)
//============================================================================


struct  BFu17i_F_C  {
  unsigned int v1:17;
  float v2;
  char v3;
};
//SIG(1 BFu17i_F_C) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_F_C()
{
  {
    init_simple_test("BFu17i_F_C");
    static STRUCT_IF_C BFu17i_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_C");
    check_field_offset(lv, v2, 4, "BFu17i_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_C, BFu17i_F_C)
//============================================================================


struct  BFu17i_F_D  {
  unsigned int v1:17;
  float v2;
  double v3;
};
//SIG(1 BFu17i_F_D) C1{ Fi:17 Fi FL}



static void Test_BFu17i_F_D()
{
  {
    init_simple_test("BFu17i_F_D");
    static STRUCT_IF_C BFu17i_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_D");
    check_field_offset(lv, v2, 4, "BFu17i_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_D, BFu17i_F_D)
//============================================================================


struct  BFu17i_F_F  {
  unsigned int v1:17;
  float v2;
  float v3;
};
//SIG(1 BFu17i_F_F) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_F_F()
{
  {
    init_simple_test("BFu17i_F_F");
    static STRUCT_IF_C BFu17i_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_F");
    check_field_offset(lv, v2, 4, "BFu17i_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_F, BFu17i_F_F)
//============================================================================


struct  BFu17i_F_I  {
  unsigned int v1:17;
  float v2;
  int v3;
};
//SIG(1 BFu17i_F_I) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_F_I()
{
  {
    init_simple_test("BFu17i_F_I");
    static STRUCT_IF_C BFu17i_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_I");
    check_field_offset(lv, v2, 4, "BFu17i_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_I, BFu17i_F_I)
//============================================================================


struct  BFu17i_F_Ip  {
  unsigned int v1:17;
  float v2;
  int *v3;
};
//SIG(1 BFu17i_F_Ip) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_F_Ip()
{
  {
    init_simple_test("BFu17i_F_Ip");
    static STRUCT_IF_C BFu17i_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Ip");
    check_field_offset(lv, v2, 4, "BFu17i_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Ip, BFu17i_F_Ip)
//============================================================================


struct  BFu17i_F_L  {
  unsigned int v1:17;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_F_L) C1{ Fi:17 Fi FL}



static void Test_BFu17i_F_L()
{
  {
    init_simple_test("BFu17i_F_L");
    static STRUCT_IF_C BFu17i_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_L");
    check_field_offset(lv, v2, 4, "BFu17i_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_L, BFu17i_F_L)
//============================================================================


struct  BFu17i_F_S  {
  unsigned int v1:17;
  float v2;
  short v3;
};
//SIG(1 BFu17i_F_S) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_F_S()
{
  {
    init_simple_test("BFu17i_F_S");
    static STRUCT_IF_C BFu17i_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_S");
    check_field_offset(lv, v2, 4, "BFu17i_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_S, BFu17i_F_S)
//============================================================================


struct  BFu17i_F_Uc  {
  unsigned int v1:17;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu17i_F_Uc) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_F_Uc()
{
  {
    init_simple_test("BFu17i_F_Uc");
    static STRUCT_IF_C BFu17i_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Uc");
    check_field_offset(lv, v2, 4, "BFu17i_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Uc, BFu17i_F_Uc)
//============================================================================


struct  BFu17i_F_Ui  {
  unsigned int v1:17;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu17i_F_Ui) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_F_Ui()
{
  {
    init_simple_test("BFu17i_F_Ui");
    static STRUCT_IF_C BFu17i_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Ui, BFu17i_F_Ui)
//============================================================================


struct  BFu17i_F_Ul  {
  unsigned int v1:17;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_F_Ul) C1{ Fi:17 Fi FL}



static void Test_BFu17i_F_Ul()
{
  {
    init_simple_test("BFu17i_F_Ul");
    static STRUCT_IF_C BFu17i_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Ul");
    check_field_offset(lv, v2, 4, "BFu17i_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Ul, BFu17i_F_Ul)
//============================================================================


struct  BFu17i_F_Us  {
  unsigned int v1:17;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu17i_F_Us) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_F_Us()
{
  {
    init_simple_test("BFu17i_F_Us");
    static STRUCT_IF_C BFu17i_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Us");
    check_field_offset(lv, v2, 4, "BFu17i_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Us, BFu17i_F_Us)
//============================================================================


struct  BFu17i_F_Vp  {
  unsigned int v1:17;
  float v2;
  void *v3;
};
//SIG(1 BFu17i_F_Vp) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_F_Vp()
{
  {
    init_simple_test("BFu17i_F_Vp");
    static STRUCT_IF_C BFu17i_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_Vp");
    check_field_offset(lv, v2, 4, "BFu17i_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_F_Vp, BFu17i_F_Vp)
//============================================================================


struct  BFu17i_I  {
  unsigned int v1:17;
  int v2;
};
//SIG(1 BFu17i_I) C1{ Fi:17 Fi}



static void Test_BFu17i_I()
{
  {
    init_simple_test("BFu17i_I");
    static STRUCT_IF_C BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I");
    check_field_offset(lv, v2, 4, "BFu17i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I, BFu17i_I)
//============================================================================


struct  BFu17i_I_BFu15i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_I_BFu15i) C1{ Fi:17 Fi Fi:15}



static void Test_BFu17i_I_BFu15i()
{
  {
    init_simple_test("BFu17i_I_BFu15i");
    static STRUCT_IF_C BFu17i_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu15i, BFu17i_I_BFu15i)
//============================================================================


struct  BFu17i_I_BFu15ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_I_BFu15ll) C1{ Fi:17 Fi FL:15}



static void Test_BFu17i_I_BFu15ll()
{
  {
    init_simple_test("BFu17i_I_BFu15ll");
    static STRUCT_IF_C BFu17i_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu15ll, BFu17i_I_BFu15ll)
//============================================================================


struct  BFu17i_I_BFu15s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_I_BFu15s) C1{ Fi:17 Fi Fs:15}



static void Test_BFu17i_I_BFu15s()
{
  {
    init_simple_test("BFu17i_I_BFu15s");
    static STRUCT_IF_C BFu17i_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu15s, BFu17i_I_BFu15s)
//============================================================================


struct  BFu17i_I_BFu16i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_I_BFu16i) C1{ Fi:17 Fi Fi:16}



static void Test_BFu17i_I_BFu16i()
{
  {
    init_simple_test("BFu17i_I_BFu16i");
    static STRUCT_IF_C BFu17i_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu16i, BFu17i_I_BFu16i)
//============================================================================


struct  BFu17i_I_BFu16ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_I_BFu16ll) C1{ Fi:17 Fi FL:16}



static void Test_BFu17i_I_BFu16ll()
{
  {
    init_simple_test("BFu17i_I_BFu16ll");
    static STRUCT_IF_C BFu17i_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu16ll, BFu17i_I_BFu16ll)
//============================================================================


struct  BFu17i_I_BFu16s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_I_BFu16s) C1{ Fi:17 Fi Fs:16}



static void Test_BFu17i_I_BFu16s()
{
  {
    init_simple_test("BFu17i_I_BFu16s");
    static STRUCT_IF_C BFu17i_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu16s, BFu17i_I_BFu16s)
//============================================================================


struct  BFu17i_I_BFu17i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_I_BFu17i) C1{ Fi:17 Fi Fi:17}



static void Test_BFu17i_I_BFu17i()
{
  {
    init_simple_test("BFu17i_I_BFu17i");
    static STRUCT_IF_C BFu17i_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu17i, BFu17i_I_BFu17i)
//============================================================================


struct  BFu17i_I_BFu17ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_I_BFu17ll) C1{ Fi:17 Fi FL:17}



static void Test_BFu17i_I_BFu17ll()
{
  {
    init_simple_test("BFu17i_I_BFu17ll");
    static STRUCT_IF_C BFu17i_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu17ll, BFu17i_I_BFu17ll)
//============================================================================


struct  BFu17i_I_BFu1c  {
  unsigned int v1:17;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_I_BFu1c) C1{ Fi:17 Fi Fc:1}



static void Test_BFu17i_I_BFu1c()
{
  {
    init_simple_test("BFu17i_I_BFu1c");
    static STRUCT_IF_C BFu17i_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu1c, BFu17i_I_BFu1c)
//============================================================================


struct  BFu17i_I_BFu1i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_I_BFu1i) C1{ Fi:17 Fi Fi:1}



static void Test_BFu17i_I_BFu1i()
{
  {
    init_simple_test("BFu17i_I_BFu1i");
    static STRUCT_IF_C BFu17i_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu1i, BFu17i_I_BFu1i)
//============================================================================


struct  BFu17i_I_BFu1ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_I_BFu1ll) C1{ Fi:17 Fi FL:1}



static void Test_BFu17i_I_BFu1ll()
{
  {
    init_simple_test("BFu17i_I_BFu1ll");
    static STRUCT_IF_C BFu17i_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu1ll, BFu17i_I_BFu1ll)
//============================================================================


struct  BFu17i_I_BFu1s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_I_BFu1s) C1{ Fi:17 Fi Fs:1}



static void Test_BFu17i_I_BFu1s()
{
  {
    init_simple_test("BFu17i_I_BFu1s");
    static STRUCT_IF_C BFu17i_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu1s, BFu17i_I_BFu1s)
//============================================================================


struct  BFu17i_I_BFu31i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_I_BFu31i) C1{ Fi:17 Fi Fi:31}



static void Test_BFu17i_I_BFu31i()
{
  {
    init_simple_test("BFu17i_I_BFu31i");
    static STRUCT_IF_C BFu17i_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu31i, BFu17i_I_BFu31i)
//============================================================================


struct  BFu17i_I_BFu31ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_I_BFu31ll) C1{ Fi:17 Fi FL:31}



static void Test_BFu17i_I_BFu31ll()
{
  {
    init_simple_test("BFu17i_I_BFu31ll");
    static STRUCT_IF_C BFu17i_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu31ll, BFu17i_I_BFu31ll)
//============================================================================


struct  BFu17i_I_BFu32i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_I_BFu32i) C1{ Fi:17 Fi Fi:32}



static void Test_BFu17i_I_BFu32i()
{
  {
    init_simple_test("BFu17i_I_BFu32i");
    static STRUCT_IF_C BFu17i_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu32i, BFu17i_I_BFu32i)
//============================================================================


struct  BFu17i_I_BFu32ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_I_BFu32ll) C1{ Fi:17 Fi FL:32}



static void Test_BFu17i_I_BFu32ll()
{
  {
    init_simple_test("BFu17i_I_BFu32ll");
    static STRUCT_IF_C BFu17i_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu32ll, BFu17i_I_BFu32ll)
//============================================================================


struct  BFu17i_I_BFu33  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_I_BFu33) C1{ Fi:17 Fi FL:33}



static void Test_BFu17i_I_BFu33()
{
  {
    init_simple_test("BFu17i_I_BFu33");
    static STRUCT_IF_C BFu17i_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu17i_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu17i_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu33, BFu17i_I_BFu33)
//============================================================================


struct  BFu17i_I_BFu7c  {
  unsigned int v1:17;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_I_BFu7c) C1{ Fi:17 Fi Fc:7}



static void Test_BFu17i_I_BFu7c()
{
  {
    init_simple_test("BFu17i_I_BFu7c");
    static STRUCT_IF_C BFu17i_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu7c, BFu17i_I_BFu7c)
//============================================================================


struct  BFu17i_I_BFu7i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_I_BFu7i) C1{ Fi:17 Fi Fi:7}



static void Test_BFu17i_I_BFu7i()
{
  {
    init_simple_test("BFu17i_I_BFu7i");
    static STRUCT_IF_C BFu17i_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu7i, BFu17i_I_BFu7i)
//============================================================================


struct  BFu17i_I_BFu7ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_I_BFu7ll) C1{ Fi:17 Fi FL:7}



static void Test_BFu17i_I_BFu7ll()
{
  {
    init_simple_test("BFu17i_I_BFu7ll");
    static STRUCT_IF_C BFu17i_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu7ll, BFu17i_I_BFu7ll)
//============================================================================


struct  BFu17i_I_BFu7s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_I_BFu7s) C1{ Fi:17 Fi Fs:7}



static void Test_BFu17i_I_BFu7s()
{
  {
    init_simple_test("BFu17i_I_BFu7s");
    static STRUCT_IF_C BFu17i_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu7s, BFu17i_I_BFu7s)
//============================================================================


struct  BFu17i_I_BFu8c  {
  unsigned int v1:17;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_I_BFu8c) C1{ Fi:17 Fi Fc:8}



static void Test_BFu17i_I_BFu8c()
{
  {
    init_simple_test("BFu17i_I_BFu8c");
    static STRUCT_IF_C BFu17i_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu8c, BFu17i_I_BFu8c)
//============================================================================


struct  BFu17i_I_BFu8i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_I_BFu8i) C1{ Fi:17 Fi Fi:8}



static void Test_BFu17i_I_BFu8i()
{
  {
    init_simple_test("BFu17i_I_BFu8i");
    static STRUCT_IF_C BFu17i_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu8i, BFu17i_I_BFu8i)
//============================================================================


struct  BFu17i_I_BFu8ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_I_BFu8ll) C1{ Fi:17 Fi FL:8}



static void Test_BFu17i_I_BFu8ll()
{
  {
    init_simple_test("BFu17i_I_BFu8ll");
    static STRUCT_IF_C BFu17i_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu8ll, BFu17i_I_BFu8ll)
//============================================================================


struct  BFu17i_I_BFu8s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_I_BFu8s) C1{ Fi:17 Fi Fs:8}



static void Test_BFu17i_I_BFu8s()
{
  {
    init_simple_test("BFu17i_I_BFu8s");
    static STRUCT_IF_C BFu17i_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu8s, BFu17i_I_BFu8s)
//============================================================================


struct  BFu17i_I_BFu9i  {
  unsigned int v1:17;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_I_BFu9i) C1{ Fi:17 Fi Fi:9}



static void Test_BFu17i_I_BFu9i()
{
  {
    init_simple_test("BFu17i_I_BFu9i");
    static STRUCT_IF_C BFu17i_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu9i, BFu17i_I_BFu9i)
//============================================================================


struct  BFu17i_I_BFu9ll  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_I_BFu9ll) C1{ Fi:17 Fi FL:9}



static void Test_BFu17i_I_BFu9ll()
{
  {
    init_simple_test("BFu17i_I_BFu9ll");
    static STRUCT_IF_C BFu17i_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu9ll, BFu17i_I_BFu9ll)
//============================================================================


struct  BFu17i_I_BFu9s  {
  unsigned int v1:17;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_I_BFu9s) C1{ Fi:17 Fi Fs:9}



static void Test_BFu17i_I_BFu9s()
{
  {
    init_simple_test("BFu17i_I_BFu9s");
    static STRUCT_IF_C BFu17i_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu17i_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_BFu9s, BFu17i_I_BFu9s)
//============================================================================


struct  BFu17i_I_C  {
  unsigned int v1:17;
  int v2;
  char v3;
};
//SIG(1 BFu17i_I_C) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_I_C()
{
  {
    init_simple_test("BFu17i_I_C");
    static STRUCT_IF_C BFu17i_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_C");
    check_field_offset(lv, v2, 4, "BFu17i_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_C, BFu17i_I_C)
//============================================================================


struct  BFu17i_I_D  {
  unsigned int v1:17;
  int v2;
  double v3;
};
//SIG(1 BFu17i_I_D) C1{ Fi:17 Fi FL}



static void Test_BFu17i_I_D()
{
  {
    init_simple_test("BFu17i_I_D");
    static STRUCT_IF_C BFu17i_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_D");
    check_field_offset(lv, v2, 4, "BFu17i_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_D, BFu17i_I_D)
//============================================================================


struct  BFu17i_I_F  {
  unsigned int v1:17;
  int v2;
  float v3;
};
//SIG(1 BFu17i_I_F) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_I_F()
{
  {
    init_simple_test("BFu17i_I_F");
    static STRUCT_IF_C BFu17i_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_F");
    check_field_offset(lv, v2, 4, "BFu17i_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_F, BFu17i_I_F)
//============================================================================


struct  BFu17i_I_I  {
  unsigned int v1:17;
  int v2;
  int v3;
};
//SIG(1 BFu17i_I_I) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_I_I()
{
  {
    init_simple_test("BFu17i_I_I");
    static STRUCT_IF_C BFu17i_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_I");
    check_field_offset(lv, v2, 4, "BFu17i_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_I, BFu17i_I_I)
//============================================================================


struct  BFu17i_I_Ip  {
  unsigned int v1:17;
  int v2;
  int *v3;
};
//SIG(1 BFu17i_I_Ip) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_I_Ip()
{
  {
    init_simple_test("BFu17i_I_Ip");
    static STRUCT_IF_C BFu17i_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Ip");
    check_field_offset(lv, v2, 4, "BFu17i_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Ip, BFu17i_I_Ip)
//============================================================================


struct  BFu17i_I_L  {
  unsigned int v1:17;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_I_L) C1{ Fi:17 Fi FL}



static void Test_BFu17i_I_L()
{
  {
    init_simple_test("BFu17i_I_L");
    static STRUCT_IF_C BFu17i_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_L");
    check_field_offset(lv, v2, 4, "BFu17i_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_L, BFu17i_I_L)
//============================================================================


struct  BFu17i_I_S  {
  unsigned int v1:17;
  int v2;
  short v3;
};
//SIG(1 BFu17i_I_S) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_I_S()
{
  {
    init_simple_test("BFu17i_I_S");
    static STRUCT_IF_C BFu17i_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_S");
    check_field_offset(lv, v2, 4, "BFu17i_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_S, BFu17i_I_S)
//============================================================================


struct  BFu17i_I_Uc  {
  unsigned int v1:17;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu17i_I_Uc) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_I_Uc()
{
  {
    init_simple_test("BFu17i_I_Uc");
    static STRUCT_IF_C BFu17i_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Uc");
    check_field_offset(lv, v2, 4, "BFu17i_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Uc, BFu17i_I_Uc)
//============================================================================


struct  BFu17i_I_Ui  {
  unsigned int v1:17;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu17i_I_Ui) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_I_Ui()
{
  {
    init_simple_test("BFu17i_I_Ui");
    static STRUCT_IF_C BFu17i_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Ui, BFu17i_I_Ui)
//============================================================================


struct  BFu17i_I_Ul  {
  unsigned int v1:17;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_I_Ul) C1{ Fi:17 Fi FL}



static void Test_BFu17i_I_Ul()
{
  {
    init_simple_test("BFu17i_I_Ul");
    static STRUCT_IF_C BFu17i_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Ul");
    check_field_offset(lv, v2, 4, "BFu17i_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Ul, BFu17i_I_Ul)
//============================================================================


struct  BFu17i_I_Us  {
  unsigned int v1:17;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu17i_I_Us) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_I_Us()
{
  {
    init_simple_test("BFu17i_I_Us");
    static STRUCT_IF_C BFu17i_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Us");
    check_field_offset(lv, v2, 4, "BFu17i_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Us, BFu17i_I_Us)
//============================================================================


struct  BFu17i_I_Vp  {
  unsigned int v1:17;
  int v2;
  void *v3;
};
//SIG(1 BFu17i_I_Vp) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_I_Vp()
{
  {
    init_simple_test("BFu17i_I_Vp");
    static STRUCT_IF_C BFu17i_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_Vp");
    check_field_offset(lv, v2, 4, "BFu17i_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_I_Vp, BFu17i_I_Vp)
//============================================================================


struct  BFu17i_Ip  {
  unsigned int v1:17;
  int *v2;
};
//SIG(1 BFu17i_Ip) C1{ Fi:17 Fp}



static void Test_BFu17i_Ip()
{
  {
    init_simple_test("BFu17i_Ip");
    static STRUCT_IF_C BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip, BFu17i_Ip)
//============================================================================


struct  BFu17i_Ip_BFu15i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Ip_BFu15i) C1{ Fi:17 Fp Fi:15}



static void Test_BFu17i_Ip_BFu15i()
{
  {
    init_simple_test("BFu17i_Ip_BFu15i");
    static STRUCT_IF_C BFu17i_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu15i, BFu17i_Ip_BFu15i)
//============================================================================


struct  BFu17i_Ip_BFu15ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Ip_BFu15ll) C1{ Fi:17 Fp FL:15}



static void Test_BFu17i_Ip_BFu15ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu15ll");
    static STRUCT_IF_C BFu17i_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu15ll, BFu17i_Ip_BFu15ll)
//============================================================================


struct  BFu17i_Ip_BFu15s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Ip_BFu15s) C1{ Fi:17 Fp Fs:15}



static void Test_BFu17i_Ip_BFu15s()
{
  {
    init_simple_test("BFu17i_Ip_BFu15s");
    static STRUCT_IF_C BFu17i_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu15s, BFu17i_Ip_BFu15s)
//============================================================================


struct  BFu17i_Ip_BFu16i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Ip_BFu16i) C1{ Fi:17 Fp Fi:16}



static void Test_BFu17i_Ip_BFu16i()
{
  {
    init_simple_test("BFu17i_Ip_BFu16i");
    static STRUCT_IF_C BFu17i_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu16i, BFu17i_Ip_BFu16i)
//============================================================================


struct  BFu17i_Ip_BFu16ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Ip_BFu16ll) C1{ Fi:17 Fp FL:16}



static void Test_BFu17i_Ip_BFu16ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu16ll");
    static STRUCT_IF_C BFu17i_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu16ll, BFu17i_Ip_BFu16ll)
//============================================================================


struct  BFu17i_Ip_BFu16s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Ip_BFu16s) C1{ Fi:17 Fp Fs:16}



static void Test_BFu17i_Ip_BFu16s()
{
  {
    init_simple_test("BFu17i_Ip_BFu16s");
    static STRUCT_IF_C BFu17i_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu16s, BFu17i_Ip_BFu16s)
//============================================================================


struct  BFu17i_Ip_BFu17i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Ip_BFu17i) C1{ Fi:17 Fp Fi:17}



static void Test_BFu17i_Ip_BFu17i()
{
  {
    init_simple_test("BFu17i_Ip_BFu17i");
    static STRUCT_IF_C BFu17i_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu17i_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu17i, BFu17i_Ip_BFu17i)
//============================================================================


struct  BFu17i_Ip_BFu17ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Ip_BFu17ll) C1{ Fi:17 Fp FL:17}



static void Test_BFu17i_Ip_BFu17ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu17ll");
    static STRUCT_IF_C BFu17i_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu17i_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu17ll, BFu17i_Ip_BFu17ll)
//============================================================================


struct  BFu17i_Ip_BFu1c  {
  unsigned int v1:17;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Ip_BFu1c) C1{ Fi:17 Fp Fc:1}



static void Test_BFu17i_Ip_BFu1c()
{
  {
    init_simple_test("BFu17i_Ip_BFu1c");
    static STRUCT_IF_C BFu17i_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu1c, BFu17i_Ip_BFu1c)
//============================================================================


struct  BFu17i_Ip_BFu1i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Ip_BFu1i) C1{ Fi:17 Fp Fi:1}



static void Test_BFu17i_Ip_BFu1i()
{
  {
    init_simple_test("BFu17i_Ip_BFu1i");
    static STRUCT_IF_C BFu17i_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu1i, BFu17i_Ip_BFu1i)
//============================================================================


struct  BFu17i_Ip_BFu1ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Ip_BFu1ll) C1{ Fi:17 Fp FL:1}



static void Test_BFu17i_Ip_BFu1ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu1ll");
    static STRUCT_IF_C BFu17i_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu1ll, BFu17i_Ip_BFu1ll)
//============================================================================


struct  BFu17i_Ip_BFu1s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Ip_BFu1s) C1{ Fi:17 Fp Fs:1}



static void Test_BFu17i_Ip_BFu1s()
{
  {
    init_simple_test("BFu17i_Ip_BFu1s");
    static STRUCT_IF_C BFu17i_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu1s, BFu17i_Ip_BFu1s)
//============================================================================


struct  BFu17i_Ip_BFu31i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Ip_BFu31i) C1{ Fi:17 Fp Fi:31}



static void Test_BFu17i_Ip_BFu31i()
{
  {
    init_simple_test("BFu17i_Ip_BFu31i");
    static STRUCT_IF_C BFu17i_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu17i_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu17i_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu31i, BFu17i_Ip_BFu31i)
//============================================================================


struct  BFu17i_Ip_BFu31ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Ip_BFu31ll) C1{ Fi:17 Fp FL:31}



static void Test_BFu17i_Ip_BFu31ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu31ll");
    static STRUCT_IF_C BFu17i_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu17i_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu17i_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu31ll, BFu17i_Ip_BFu31ll)
//============================================================================


struct  BFu17i_Ip_BFu32i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Ip_BFu32i) C1{ Fi:17 Fp Fi:32}



static void Test_BFu17i_Ip_BFu32i()
{
  {
    init_simple_test("BFu17i_Ip_BFu32i");
    static STRUCT_IF_C BFu17i_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu17i_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu17i_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu32i, BFu17i_Ip_BFu32i)
//============================================================================


struct  BFu17i_Ip_BFu32ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Ip_BFu32ll) C1{ Fi:17 Fp FL:32}



static void Test_BFu17i_Ip_BFu32ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu32ll");
    static STRUCT_IF_C BFu17i_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu17i_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu17i_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu32ll, BFu17i_Ip_BFu32ll)
//============================================================================


struct  BFu17i_Ip_BFu33  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Ip_BFu33) C1{ Fi:17 Fp FL:33}



static void Test_BFu17i_Ip_BFu33()
{
  {
    init_simple_test("BFu17i_Ip_BFu33");
    static STRUCT_IF_C BFu17i_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu17i_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu17i_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu33, BFu17i_Ip_BFu33)
//============================================================================


struct  BFu17i_Ip_BFu7c  {
  unsigned int v1:17;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Ip_BFu7c) C1{ Fi:17 Fp Fc:7}



static void Test_BFu17i_Ip_BFu7c()
{
  {
    init_simple_test("BFu17i_Ip_BFu7c");
    static STRUCT_IF_C BFu17i_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu7c, BFu17i_Ip_BFu7c)
//============================================================================


struct  BFu17i_Ip_BFu7i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Ip_BFu7i) C1{ Fi:17 Fp Fi:7}



static void Test_BFu17i_Ip_BFu7i()
{
  {
    init_simple_test("BFu17i_Ip_BFu7i");
    static STRUCT_IF_C BFu17i_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu7i, BFu17i_Ip_BFu7i)
//============================================================================


struct  BFu17i_Ip_BFu7ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Ip_BFu7ll) C1{ Fi:17 Fp FL:7}



static void Test_BFu17i_Ip_BFu7ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu7ll");
    static STRUCT_IF_C BFu17i_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu7ll, BFu17i_Ip_BFu7ll)
//============================================================================


struct  BFu17i_Ip_BFu7s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Ip_BFu7s) C1{ Fi:17 Fp Fs:7}



static void Test_BFu17i_Ip_BFu7s()
{
  {
    init_simple_test("BFu17i_Ip_BFu7s");
    static STRUCT_IF_C BFu17i_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu7s, BFu17i_Ip_BFu7s)
//============================================================================


struct  BFu17i_Ip_BFu8c  {
  unsigned int v1:17;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Ip_BFu8c) C1{ Fi:17 Fp Fc:8}



static void Test_BFu17i_Ip_BFu8c()
{
  {
    init_simple_test("BFu17i_Ip_BFu8c");
    static STRUCT_IF_C BFu17i_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu8c, BFu17i_Ip_BFu8c)
//============================================================================


struct  BFu17i_Ip_BFu8i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Ip_BFu8i) C1{ Fi:17 Fp Fi:8}



static void Test_BFu17i_Ip_BFu8i()
{
  {
    init_simple_test("BFu17i_Ip_BFu8i");
    static STRUCT_IF_C BFu17i_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu8i, BFu17i_Ip_BFu8i)
//============================================================================


struct  BFu17i_Ip_BFu8ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Ip_BFu8ll) C1{ Fi:17 Fp FL:8}



static void Test_BFu17i_Ip_BFu8ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu8ll");
    static STRUCT_IF_C BFu17i_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu8ll, BFu17i_Ip_BFu8ll)
//============================================================================


struct  BFu17i_Ip_BFu8s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Ip_BFu8s) C1{ Fi:17 Fp Fs:8}



static void Test_BFu17i_Ip_BFu8s()
{
  {
    init_simple_test("BFu17i_Ip_BFu8s");
    static STRUCT_IF_C BFu17i_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu8s, BFu17i_Ip_BFu8s)
//============================================================================


struct  BFu17i_Ip_BFu9i  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Ip_BFu9i) C1{ Fi:17 Fp Fi:9}



static void Test_BFu17i_Ip_BFu9i()
{
  {
    init_simple_test("BFu17i_Ip_BFu9i");
    static STRUCT_IF_C BFu17i_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu9i, BFu17i_Ip_BFu9i)
//============================================================================


struct  BFu17i_Ip_BFu9ll  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Ip_BFu9ll) C1{ Fi:17 Fp FL:9}



static void Test_BFu17i_Ip_BFu9ll()
{
  {
    init_simple_test("BFu17i_Ip_BFu9ll");
    static STRUCT_IF_C BFu17i_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu9ll, BFu17i_Ip_BFu9ll)
//============================================================================


struct  BFu17i_Ip_BFu9s  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Ip_BFu9s) C1{ Fi:17 Fp Fs:9}



static void Test_BFu17i_Ip_BFu9s()
{
  {
    init_simple_test("BFu17i_Ip_BFu9s");
    static STRUCT_IF_C BFu17i_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_BFu9s, BFu17i_Ip_BFu9s)
//============================================================================


struct  BFu17i_Ip_C  {
  unsigned int v1:17;
  int *v2;
  char v3;
};
//SIG(1 BFu17i_Ip_C) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Ip_C()
{
  {
    init_simple_test("BFu17i_Ip_C");
    static STRUCT_IF_C BFu17i_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_C, BFu17i_Ip_C)
//============================================================================


struct  BFu17i_Ip_D  {
  unsigned int v1:17;
  int *v2;
  double v3;
};
//SIG(1 BFu17i_Ip_D) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Ip_D()
{
  {
    init_simple_test("BFu17i_Ip_D");
    static STRUCT_IF_C BFu17i_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_D, BFu17i_Ip_D)
//============================================================================


struct  BFu17i_Ip_F  {
  unsigned int v1:17;
  int *v2;
  float v3;
};
//SIG(1 BFu17i_Ip_F) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Ip_F()
{
  {
    init_simple_test("BFu17i_Ip_F");
    static STRUCT_IF_C BFu17i_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_F, BFu17i_Ip_F)
//============================================================================


struct  BFu17i_Ip_I  {
  unsigned int v1:17;
  int *v2;
  int v3;
};
//SIG(1 BFu17i_Ip_I) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Ip_I()
{
  {
    init_simple_test("BFu17i_Ip_I");
    static STRUCT_IF_C BFu17i_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_I, BFu17i_Ip_I)
//============================================================================


struct  BFu17i_Ip_Ip  {
  unsigned int v1:17;
  int *v2;
  int *v3;
};
//SIG(1 BFu17i_Ip_Ip) C1{ Fi:17 Fp[2]}



static void Test_BFu17i_Ip_Ip()
{
  {
    init_simple_test("BFu17i_Ip_Ip");
    static STRUCT_IF_C BFu17i_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Ip, BFu17i_Ip_Ip)
//============================================================================


struct  BFu17i_Ip_L  {
  unsigned int v1:17;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Ip_L) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Ip_L()
{
  {
    init_simple_test("BFu17i_Ip_L");
    static STRUCT_IF_C BFu17i_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_L, BFu17i_Ip_L)
//============================================================================


struct  BFu17i_Ip_S  {
  unsigned int v1:17;
  int *v2;
  short v3;
};
//SIG(1 BFu17i_Ip_S) C1{ Fi:17 Fp Fs}



static void Test_BFu17i_Ip_S()
{
  {
    init_simple_test("BFu17i_Ip_S");
    static STRUCT_IF_C BFu17i_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_S, BFu17i_Ip_S)
//============================================================================


struct  BFu17i_Ip_Uc  {
  unsigned int v1:17;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Ip_Uc) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Ip_Uc()
{
  {
    init_simple_test("BFu17i_Ip_Uc");
    static STRUCT_IF_C BFu17i_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Uc, BFu17i_Ip_Uc)
//============================================================================


struct  BFu17i_Ip_Ui  {
  unsigned int v1:17;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Ip_Ui) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Ip_Ui()
{
  {
    init_simple_test("BFu17i_Ip_Ui");
    static STRUCT_IF_C BFu17i_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Ui, BFu17i_Ip_Ui)
//============================================================================


struct  BFu17i_Ip_Ul  {
  unsigned int v1:17;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Ip_Ul) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Ip_Ul()
{
  {
    init_simple_test("BFu17i_Ip_Ul");
    static STRUCT_IF_C BFu17i_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Ul, BFu17i_Ip_Ul)
//============================================================================


struct  BFu17i_Ip_Us  {
  unsigned int v1:17;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Ip_Us) C1{ Fi:17 Fp Fs}



static void Test_BFu17i_Ip_Us()
{
  {
    init_simple_test("BFu17i_Ip_Us");
    static STRUCT_IF_C BFu17i_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Us, BFu17i_Ip_Us)
//============================================================================


struct  BFu17i_Ip_Vp  {
  unsigned int v1:17;
  int *v2;
  void *v3;
};
//SIG(1 BFu17i_Ip_Vp) C1{ Fi:17 Fp[2]}



static void Test_BFu17i_Ip_Vp()
{
  {
    init_simple_test("BFu17i_Ip_Vp");
    static STRUCT_IF_C BFu17i_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ip_Vp, BFu17i_Ip_Vp)
//============================================================================


struct  BFu17i_L  {
  unsigned int v1:17;
  __tsi64 v2;
};
//SIG(1 BFu17i_L) C1{ Fi:17 FL}



static void Test_BFu17i_L()
{
  {
    init_simple_test("BFu17i_L");
    static STRUCT_IF_C BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L, BFu17i_L)
//============================================================================


struct  BFu17i_L_BFu15i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_L_BFu15i) C1{ Fi:17 FL Fi:15}



static void Test_BFu17i_L_BFu15i()
{
  {
    init_simple_test("BFu17i_L_BFu15i");
    static STRUCT_IF_C BFu17i_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu15i, BFu17i_L_BFu15i)
//============================================================================


struct  BFu17i_L_BFu15ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_L_BFu15ll) C1{ Fi:17 FL FL:15}



static void Test_BFu17i_L_BFu15ll()
{
  {
    init_simple_test("BFu17i_L_BFu15ll");
    static STRUCT_IF_C BFu17i_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu15ll, BFu17i_L_BFu15ll)
//============================================================================


struct  BFu17i_L_BFu15s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_L_BFu15s) C1{ Fi:17 FL Fs:15}



static void Test_BFu17i_L_BFu15s()
{
  {
    init_simple_test("BFu17i_L_BFu15s");
    static STRUCT_IF_C BFu17i_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu15s, BFu17i_L_BFu15s)
//============================================================================


struct  BFu17i_L_BFu16i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_L_BFu16i) C1{ Fi:17 FL Fi:16}



static void Test_BFu17i_L_BFu16i()
{
  {
    init_simple_test("BFu17i_L_BFu16i");
    static STRUCT_IF_C BFu17i_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu16i, BFu17i_L_BFu16i)
//============================================================================


struct  BFu17i_L_BFu16ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_L_BFu16ll) C1{ Fi:17 FL FL:16}



static void Test_BFu17i_L_BFu16ll()
{
  {
    init_simple_test("BFu17i_L_BFu16ll");
    static STRUCT_IF_C BFu17i_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu16ll, BFu17i_L_BFu16ll)
//============================================================================


struct  BFu17i_L_BFu16s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_L_BFu16s) C1{ Fi:17 FL Fs:16}



static void Test_BFu17i_L_BFu16s()
{
  {
    init_simple_test("BFu17i_L_BFu16s");
    static STRUCT_IF_C BFu17i_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu16s, BFu17i_L_BFu16s)
//============================================================================


struct  BFu17i_L_BFu17i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_L_BFu17i) C1{ Fi:17 FL Fi:17}



static void Test_BFu17i_L_BFu17i()
{
  {
    init_simple_test("BFu17i_L_BFu17i");
    static STRUCT_IF_C BFu17i_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu17i, BFu17i_L_BFu17i)
//============================================================================


struct  BFu17i_L_BFu17ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_L_BFu17ll) C1{ Fi:17 FL FL:17}



static void Test_BFu17i_L_BFu17ll()
{
  {
    init_simple_test("BFu17i_L_BFu17ll");
    static STRUCT_IF_C BFu17i_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu17ll, BFu17i_L_BFu17ll)
//============================================================================


struct  BFu17i_L_BFu1c  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_L_BFu1c) C1{ Fi:17 FL Fc:1}



static void Test_BFu17i_L_BFu1c()
{
  {
    init_simple_test("BFu17i_L_BFu1c");
    static STRUCT_IF_C BFu17i_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu1c, BFu17i_L_BFu1c)
//============================================================================


struct  BFu17i_L_BFu1i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_L_BFu1i) C1{ Fi:17 FL Fi:1}



static void Test_BFu17i_L_BFu1i()
{
  {
    init_simple_test("BFu17i_L_BFu1i");
    static STRUCT_IF_C BFu17i_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu1i, BFu17i_L_BFu1i)
//============================================================================


struct  BFu17i_L_BFu1ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_L_BFu1ll) C1{ Fi:17 FL FL:1}



static void Test_BFu17i_L_BFu1ll()
{
  {
    init_simple_test("BFu17i_L_BFu1ll");
    static STRUCT_IF_C BFu17i_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu1ll, BFu17i_L_BFu1ll)
//============================================================================


struct  BFu17i_L_BFu1s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_L_BFu1s) C1{ Fi:17 FL Fs:1}



static void Test_BFu17i_L_BFu1s()
{
  {
    init_simple_test("BFu17i_L_BFu1s");
    static STRUCT_IF_C BFu17i_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu1s, BFu17i_L_BFu1s)
//============================================================================


struct  BFu17i_L_BFu31i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_L_BFu31i) C1{ Fi:17 FL Fi:31}



static void Test_BFu17i_L_BFu31i()
{
  {
    init_simple_test("BFu17i_L_BFu31i");
    static STRUCT_IF_C BFu17i_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu31i, BFu17i_L_BFu31i)
//============================================================================


struct  BFu17i_L_BFu31ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_L_BFu31ll) C1{ Fi:17 FL FL:31}



static void Test_BFu17i_L_BFu31ll()
{
  {
    init_simple_test("BFu17i_L_BFu31ll");
    static STRUCT_IF_C BFu17i_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu31ll, BFu17i_L_BFu31ll)
//============================================================================


struct  BFu17i_L_BFu32i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_L_BFu32i) C1{ Fi:17 FL Fi:32}



static void Test_BFu17i_L_BFu32i()
{
  {
    init_simple_test("BFu17i_L_BFu32i");
    static STRUCT_IF_C BFu17i_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu32i, BFu17i_L_BFu32i)
//============================================================================


struct  BFu17i_L_BFu32ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_L_BFu32ll) C1{ Fi:17 FL FL:32}



static void Test_BFu17i_L_BFu32ll()
{
  {
    init_simple_test("BFu17i_L_BFu32ll");
    static STRUCT_IF_C BFu17i_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu32ll, BFu17i_L_BFu32ll)
//============================================================================


struct  BFu17i_L_BFu33  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_L_BFu33) C1{ Fi:17 FL FL:33}



static void Test_BFu17i_L_BFu33()
{
  {
    init_simple_test("BFu17i_L_BFu33");
    static STRUCT_IF_C BFu17i_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu17i_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu17i_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu33, BFu17i_L_BFu33)
//============================================================================


struct  BFu17i_L_BFu7c  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_L_BFu7c) C1{ Fi:17 FL Fc:7}



static void Test_BFu17i_L_BFu7c()
{
  {
    init_simple_test("BFu17i_L_BFu7c");
    static STRUCT_IF_C BFu17i_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu7c, BFu17i_L_BFu7c)
//============================================================================


struct  BFu17i_L_BFu7i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_L_BFu7i) C1{ Fi:17 FL Fi:7}



static void Test_BFu17i_L_BFu7i()
{
  {
    init_simple_test("BFu17i_L_BFu7i");
    static STRUCT_IF_C BFu17i_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu7i, BFu17i_L_BFu7i)
//============================================================================


struct  BFu17i_L_BFu7ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_L_BFu7ll) C1{ Fi:17 FL FL:7}



static void Test_BFu17i_L_BFu7ll()
{
  {
    init_simple_test("BFu17i_L_BFu7ll");
    static STRUCT_IF_C BFu17i_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu7ll, BFu17i_L_BFu7ll)
//============================================================================


struct  BFu17i_L_BFu7s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_L_BFu7s) C1{ Fi:17 FL Fs:7}



static void Test_BFu17i_L_BFu7s()
{
  {
    init_simple_test("BFu17i_L_BFu7s");
    static STRUCT_IF_C BFu17i_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu7s, BFu17i_L_BFu7s)
//============================================================================


struct  BFu17i_L_BFu8c  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_L_BFu8c) C1{ Fi:17 FL Fc:8}



static void Test_BFu17i_L_BFu8c()
{
  {
    init_simple_test("BFu17i_L_BFu8c");
    static STRUCT_IF_C BFu17i_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu8c, BFu17i_L_BFu8c)
//============================================================================


struct  BFu17i_L_BFu8i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_L_BFu8i) C1{ Fi:17 FL Fi:8}



static void Test_BFu17i_L_BFu8i()
{
  {
    init_simple_test("BFu17i_L_BFu8i");
    static STRUCT_IF_C BFu17i_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu8i, BFu17i_L_BFu8i)
//============================================================================


struct  BFu17i_L_BFu8ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_L_BFu8ll) C1{ Fi:17 FL FL:8}



static void Test_BFu17i_L_BFu8ll()
{
  {
    init_simple_test("BFu17i_L_BFu8ll");
    static STRUCT_IF_C BFu17i_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu8ll, BFu17i_L_BFu8ll)
//============================================================================


struct  BFu17i_L_BFu8s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_L_BFu8s) C1{ Fi:17 FL Fs:8}



static void Test_BFu17i_L_BFu8s()
{
  {
    init_simple_test("BFu17i_L_BFu8s");
    static STRUCT_IF_C BFu17i_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu8s, BFu17i_L_BFu8s)
//============================================================================


struct  BFu17i_L_BFu9i  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_L_BFu9i) C1{ Fi:17 FL Fi:9}



static void Test_BFu17i_L_BFu9i()
{
  {
    init_simple_test("BFu17i_L_BFu9i");
    static STRUCT_IF_C BFu17i_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu9i, BFu17i_L_BFu9i)
//============================================================================


struct  BFu17i_L_BFu9ll  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_L_BFu9ll) C1{ Fi:17 FL FL:9}



static void Test_BFu17i_L_BFu9ll()
{
  {
    init_simple_test("BFu17i_L_BFu9ll");
    static STRUCT_IF_C BFu17i_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu9ll, BFu17i_L_BFu9ll)
//============================================================================


struct  BFu17i_L_BFu9s  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_L_BFu9s) C1{ Fi:17 FL Fs:9}



static void Test_BFu17i_L_BFu9s()
{
  {
    init_simple_test("BFu17i_L_BFu9s");
    static STRUCT_IF_C BFu17i_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_BFu9s, BFu17i_L_BFu9s)
//============================================================================


struct  BFu17i_L_C  {
  unsigned int v1:17;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu17i_L_C) C1{ Fi:17 FL Fc}



static void Test_BFu17i_L_C()
{
  {
    init_simple_test("BFu17i_L_C");
    static STRUCT_IF_C BFu17i_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_C, BFu17i_L_C)
//============================================================================


struct  BFu17i_L_D  {
  unsigned int v1:17;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu17i_L_D) C1{ Fi:17 FL[2]}



static void Test_BFu17i_L_D()
{
  {
    init_simple_test("BFu17i_L_D");
    static STRUCT_IF_C BFu17i_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_D, BFu17i_L_D)
//============================================================================


struct  BFu17i_L_F  {
  unsigned int v1:17;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu17i_L_F) C1{ Fi:17 FL Fi}



static void Test_BFu17i_L_F()
{
  {
    init_simple_test("BFu17i_L_F");
    static STRUCT_IF_C BFu17i_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_F, BFu17i_L_F)
//============================================================================


struct  BFu17i_L_I  {
  unsigned int v1:17;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu17i_L_I) C1{ Fi:17 FL Fi}



static void Test_BFu17i_L_I()
{
  {
    init_simple_test("BFu17i_L_I");
    static STRUCT_IF_C BFu17i_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_I, BFu17i_L_I)
//============================================================================


struct  BFu17i_L_Ip  {
  unsigned int v1:17;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu17i_L_Ip) C1{ Fi:17 FL Fp}



static void Test_BFu17i_L_Ip()
{
  {
    init_simple_test("BFu17i_L_Ip");
    static STRUCT_IF_C BFu17i_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Ip, BFu17i_L_Ip)
//============================================================================


struct  BFu17i_L_L  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_L_L) C1{ Fi:17 FL[2]}



static void Test_BFu17i_L_L()
{
  {
    init_simple_test("BFu17i_L_L");
    static STRUCT_IF_C BFu17i_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_L, BFu17i_L_L)
//============================================================================


struct  BFu17i_L_S  {
  unsigned int v1:17;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu17i_L_S) C1{ Fi:17 FL Fs}



static void Test_BFu17i_L_S()
{
  {
    init_simple_test("BFu17i_L_S");
    static STRUCT_IF_C BFu17i_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_S, BFu17i_L_S)
//============================================================================


struct  BFu17i_L_Uc  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu17i_L_Uc) C1{ Fi:17 FL Fc}



static void Test_BFu17i_L_Uc()
{
  {
    init_simple_test("BFu17i_L_Uc");
    static STRUCT_IF_C BFu17i_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Uc, BFu17i_L_Uc)
//============================================================================


struct  BFu17i_L_Ui  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu17i_L_Ui) C1{ Fi:17 FL Fi}



static void Test_BFu17i_L_Ui()
{
  {
    init_simple_test("BFu17i_L_Ui");
    static STRUCT_IF_C BFu17i_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Ui, BFu17i_L_Ui)
//============================================================================


struct  BFu17i_L_Ul  {
  unsigned int v1:17;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_L_Ul) C1{ Fi:17 FL[2]}



static void Test_BFu17i_L_Ul()
{
  {
    init_simple_test("BFu17i_L_Ul");
    static STRUCT_IF_C BFu17i_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Ul, BFu17i_L_Ul)
//============================================================================


struct  BFu17i_L_Us  {
  unsigned int v1:17;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu17i_L_Us) C1{ Fi:17 FL Fs}



static void Test_BFu17i_L_Us()
{
  {
    init_simple_test("BFu17i_L_Us");
    static STRUCT_IF_C BFu17i_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Us, BFu17i_L_Us)
//============================================================================


struct  BFu17i_L_Vp  {
  unsigned int v1:17;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu17i_L_Vp) C1{ Fi:17 FL Fp}



static void Test_BFu17i_L_Vp()
{
  {
    init_simple_test("BFu17i_L_Vp");
    static STRUCT_IF_C BFu17i_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_L_Vp, BFu17i_L_Vp)
//============================================================================


struct  BFu17i_S  {
  unsigned int v1:17;
  short v2;
};
//SIG(1 BFu17i_S) C1{ Fi:17 Fs}



static void Test_BFu17i_S()
{
  {
    init_simple_test("BFu17i_S");
    static STRUCT_IF_C BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S");
    check_field_offset(lv, v2, 4, "BFu17i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S, BFu17i_S)
//============================================================================


struct  BFu17i_S_BFu15i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_S_BFu15i) C1{ Fi:17 Fs Fi:15}



static void Test_BFu17i_S_BFu15i()
{
  {
    init_simple_test("BFu17i_S_BFu15i");
    static STRUCT_IF_C BFu17i_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu15i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_S_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu15i, BFu17i_S_BFu15i)
//============================================================================


struct  BFu17i_S_BFu15ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_S_BFu15ll) C1{ Fi:17 Fs FL:15}



static void Test_BFu17i_S_BFu15ll()
{
  {
    init_simple_test("BFu17i_S_BFu15ll");
    static STRUCT_IF_C BFu17i_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_S_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu15ll, BFu17i_S_BFu15ll)
//============================================================================


struct  BFu17i_S_BFu15s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_S_BFu15s) C1{ Fi:17 Fs Fs:15}



static void Test_BFu17i_S_BFu15s()
{
  {
    init_simple_test("BFu17i_S_BFu15s");
    static STRUCT_IF_C BFu17i_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu15s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_S_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu15s, BFu17i_S_BFu15s)
//============================================================================


struct  BFu17i_S_BFu16i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_S_BFu16i) C1{ Fi:17 Fs Fi:16}



static void Test_BFu17i_S_BFu16i()
{
  {
    init_simple_test("BFu17i_S_BFu16i");
    static STRUCT_IF_C BFu17i_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu16i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_S_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu16i, BFu17i_S_BFu16i)
//============================================================================


struct  BFu17i_S_BFu16ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_S_BFu16ll) C1{ Fi:17 Fs FL:16}



static void Test_BFu17i_S_BFu16ll()
{
  {
    init_simple_test("BFu17i_S_BFu16ll");
    static STRUCT_IF_C BFu17i_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_S_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu16ll, BFu17i_S_BFu16ll)
//============================================================================


struct  BFu17i_S_BFu16s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_S_BFu16s) C1{ Fi:17 Fs Fs:16}



static void Test_BFu17i_S_BFu16s()
{
  {
    init_simple_test("BFu17i_S_BFu16s");
    static STRUCT_IF_C BFu17i_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu16s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_S_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu16s, BFu17i_S_BFu16s)
//============================================================================


struct  BFu17i_S_BFu17i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_S_BFu17i) C1{ Fi:17 Fs Fi:17}



static void Test_BFu17i_S_BFu17i()
{
  {
    init_simple_test("BFu17i_S_BFu17i");
    static STRUCT_IF_C BFu17i_S_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu17i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_S_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu17i, BFu17i_S_BFu17i)
//============================================================================


struct  BFu17i_S_BFu17ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_S_BFu17ll) C1{ Fi:17 Fs FL:17}



static void Test_BFu17i_S_BFu17ll()
{
  {
    init_simple_test("BFu17i_S_BFu17ll");
    static STRUCT_IF_C BFu17i_S_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17i_S_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu17ll, BFu17i_S_BFu17ll)
//============================================================================


struct  BFu17i_S_BFu1c  {
  unsigned int v1:17;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_S_BFu1c) C1{ Fi:17 Fs Fc:1}



static void Test_BFu17i_S_BFu1c()
{
  {
    init_simple_test("BFu17i_S_BFu1c");
    static STRUCT_IF_C BFu17i_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu1c");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu1c, BFu17i_S_BFu1c)
//============================================================================


struct  BFu17i_S_BFu1i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_S_BFu1i) C1{ Fi:17 Fs Fi:1}



static void Test_BFu17i_S_BFu1i()
{
  {
    init_simple_test("BFu17i_S_BFu1i");
    static STRUCT_IF_C BFu17i_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu1i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu1i, BFu17i_S_BFu1i)
//============================================================================


struct  BFu17i_S_BFu1ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_S_BFu1ll) C1{ Fi:17 Fs FL:1}



static void Test_BFu17i_S_BFu1ll()
{
  {
    init_simple_test("BFu17i_S_BFu1ll");
    static STRUCT_IF_C BFu17i_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu1ll, BFu17i_S_BFu1ll)
//============================================================================


struct  BFu17i_S_BFu1s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_S_BFu1s) C1{ Fi:17 Fs Fs:1}



static void Test_BFu17i_S_BFu1s()
{
  {
    init_simple_test("BFu17i_S_BFu1s");
    static STRUCT_IF_C BFu17i_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu1s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu1s, BFu17i_S_BFu1s)
//============================================================================


struct  BFu17i_S_BFu31i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_S_BFu31i) C1{ Fi:17 Fs Fi:31}



static void Test_BFu17i_S_BFu31i()
{
  {
    init_simple_test("BFu17i_S_BFu31i");
    static STRUCT_IF_C BFu17i_S_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu31i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_S_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu31i, BFu17i_S_BFu31i)
//============================================================================


struct  BFu17i_S_BFu31ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_S_BFu31ll) C1{ Fi:17 Fs FL:31}



static void Test_BFu17i_S_BFu31ll()
{
  {
    init_simple_test("BFu17i_S_BFu31ll");
    static STRUCT_IF_C BFu17i_S_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17i_S_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17i_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu31ll, BFu17i_S_BFu31ll)
//============================================================================


struct  BFu17i_S_BFu32i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_S_BFu32i) C1{ Fi:17 Fs Fi:32}



static void Test_BFu17i_S_BFu32i()
{
  {
    init_simple_test("BFu17i_S_BFu32i");
    static STRUCT_IF_C BFu17i_S_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu32i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_S_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu32i, BFu17i_S_BFu32i)
//============================================================================


struct  BFu17i_S_BFu32ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_S_BFu32ll) C1{ Fi:17 Fs FL:32}



static void Test_BFu17i_S_BFu32ll()
{
  {
    init_simple_test("BFu17i_S_BFu32ll");
    static STRUCT_IF_C BFu17i_S_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17i_S_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17i_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu32ll, BFu17i_S_BFu32ll)
//============================================================================


struct  BFu17i_S_BFu33  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_S_BFu33) C1{ Fi:17 Fs FL:33}



static void Test_BFu17i_S_BFu33()
{
  {
    init_simple_test("BFu17i_S_BFu33");
    static STRUCT_IF_C BFu17i_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu33");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17i_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17i_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu33, BFu17i_S_BFu33)
//============================================================================


struct  BFu17i_S_BFu7c  {
  unsigned int v1:17;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_S_BFu7c) C1{ Fi:17 Fs Fc:7}



static void Test_BFu17i_S_BFu7c()
{
  {
    init_simple_test("BFu17i_S_BFu7c");
    static STRUCT_IF_C BFu17i_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu7c");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_S_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu7c, BFu17i_S_BFu7c)
//============================================================================


struct  BFu17i_S_BFu7i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_S_BFu7i) C1{ Fi:17 Fs Fi:7}



static void Test_BFu17i_S_BFu7i()
{
  {
    init_simple_test("BFu17i_S_BFu7i");
    static STRUCT_IF_C BFu17i_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu7i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_S_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu7i, BFu17i_S_BFu7i)
//============================================================================


struct  BFu17i_S_BFu7ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_S_BFu7ll) C1{ Fi:17 Fs FL:7}



static void Test_BFu17i_S_BFu7ll()
{
  {
    init_simple_test("BFu17i_S_BFu7ll");
    static STRUCT_IF_C BFu17i_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_S_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu7ll, BFu17i_S_BFu7ll)
//============================================================================


struct  BFu17i_S_BFu7s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_S_BFu7s) C1{ Fi:17 Fs Fs:7}



static void Test_BFu17i_S_BFu7s()
{
  {
    init_simple_test("BFu17i_S_BFu7s");
    static STRUCT_IF_C BFu17i_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu7s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_S_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu7s, BFu17i_S_BFu7s)
//============================================================================


struct  BFu17i_S_BFu8c  {
  unsigned int v1:17;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_S_BFu8c) C1{ Fi:17 Fs Fc:8}



static void Test_BFu17i_S_BFu8c()
{
  {
    init_simple_test("BFu17i_S_BFu8c");
    static STRUCT_IF_C BFu17i_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu8c");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_S_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu8c, BFu17i_S_BFu8c)
//============================================================================


struct  BFu17i_S_BFu8i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_S_BFu8i) C1{ Fi:17 Fs Fi:8}



static void Test_BFu17i_S_BFu8i()
{
  {
    init_simple_test("BFu17i_S_BFu8i");
    static STRUCT_IF_C BFu17i_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu8i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_S_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu8i, BFu17i_S_BFu8i)
//============================================================================


struct  BFu17i_S_BFu8ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_S_BFu8ll) C1{ Fi:17 Fs FL:8}



static void Test_BFu17i_S_BFu8ll()
{
  {
    init_simple_test("BFu17i_S_BFu8ll");
    static STRUCT_IF_C BFu17i_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_S_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu8ll, BFu17i_S_BFu8ll)
//============================================================================


struct  BFu17i_S_BFu8s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_S_BFu8s) C1{ Fi:17 Fs Fs:8}



static void Test_BFu17i_S_BFu8s()
{
  {
    init_simple_test("BFu17i_S_BFu8s");
    static STRUCT_IF_C BFu17i_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu8s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_S_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu8s, BFu17i_S_BFu8s)
//============================================================================


struct  BFu17i_S_BFu9i  {
  unsigned int v1:17;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_S_BFu9i) C1{ Fi:17 Fs Fi:9}



static void Test_BFu17i_S_BFu9i()
{
  {
    init_simple_test("BFu17i_S_BFu9i");
    static STRUCT_IF_C BFu17i_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu9i");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_S_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu9i, BFu17i_S_BFu9i)
//============================================================================


struct  BFu17i_S_BFu9ll  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_S_BFu9ll) C1{ Fi:17 Fs FL:9}



static void Test_BFu17i_S_BFu9ll()
{
  {
    init_simple_test("BFu17i_S_BFu9ll");
    static STRUCT_IF_C BFu17i_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_S_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu9ll, BFu17i_S_BFu9ll)
//============================================================================


struct  BFu17i_S_BFu9s  {
  unsigned int v1:17;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_S_BFu9s) C1{ Fi:17 Fs Fs:9}



static void Test_BFu17i_S_BFu9s()
{
  {
    init_simple_test("BFu17i_S_BFu9s");
    static STRUCT_IF_C BFu17i_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_BFu9s");
    check_field_offset(lv, v2, 4, "BFu17i_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_S_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_BFu9s, BFu17i_S_BFu9s)
//============================================================================


struct  BFu17i_S_C  {
  unsigned int v1:17;
  short v2;
  char v3;
};
//SIG(1 BFu17i_S_C) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_S_C()
{
  {
    init_simple_test("BFu17i_S_C");
    static STRUCT_IF_C BFu17i_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_C");
    check_field_offset(lv, v2, 4, "BFu17i_S_C.v2");
    check_field_offset(lv, v3, 6, "BFu17i_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_C, BFu17i_S_C)
//============================================================================


struct  BFu17i_S_D  {
  unsigned int v1:17;
  short v2;
  double v3;
};
//SIG(1 BFu17i_S_D) C1{ Fi:17 Fs FL}



static void Test_BFu17i_S_D()
{
  {
    init_simple_test("BFu17i_S_D");
    static STRUCT_IF_C BFu17i_S_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_D");
    check_field_offset(lv, v2, 4, "BFu17i_S_D.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_D, BFu17i_S_D)
//============================================================================


struct  BFu17i_S_F  {
  unsigned int v1:17;
  short v2;
  float v3;
};
//SIG(1 BFu17i_S_F) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_S_F()
{
  {
    init_simple_test("BFu17i_S_F");
    static STRUCT_IF_C BFu17i_S_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_F");
    check_field_offset(lv, v2, 4, "BFu17i_S_F.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_F, BFu17i_S_F)
//============================================================================


struct  BFu17i_S_I  {
  unsigned int v1:17;
  short v2;
  int v3;
};
//SIG(1 BFu17i_S_I) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_S_I()
{
  {
    init_simple_test("BFu17i_S_I");
    static STRUCT_IF_C BFu17i_S_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_I");
    check_field_offset(lv, v2, 4, "BFu17i_S_I.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_I, BFu17i_S_I)
//============================================================================


struct  BFu17i_S_Ip  {
  unsigned int v1:17;
  short v2;
  int *v3;
};
//SIG(1 BFu17i_S_Ip) C1{ Fi:17 Fs Fp}



static void Test_BFu17i_S_Ip()
{
  {
    init_simple_test("BFu17i_S_Ip");
    static STRUCT_IF_C BFu17i_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Ip");
    check_field_offset(lv, v2, 4, "BFu17i_S_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Ip, BFu17i_S_Ip)
//============================================================================


struct  BFu17i_S_L  {
  unsigned int v1:17;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_S_L) C1{ Fi:17 Fs FL}



static void Test_BFu17i_S_L()
{
  {
    init_simple_test("BFu17i_S_L");
    static STRUCT_IF_C BFu17i_S_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_L");
    check_field_offset(lv, v2, 4, "BFu17i_S_L.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_L, BFu17i_S_L)
//============================================================================


struct  BFu17i_S_S  {
  unsigned int v1:17;
  short v2;
  short v3;
};
//SIG(1 BFu17i_S_S) C1{ Fi:17 Fs[2]}



static void Test_BFu17i_S_S()
{
  {
    init_simple_test("BFu17i_S_S");
    static STRUCT_IF_C BFu17i_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_S");
    check_field_offset(lv, v2, 4, "BFu17i_S_S.v2");
    check_field_offset(lv, v3, 6, "BFu17i_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_S, BFu17i_S_S)
//============================================================================


struct  BFu17i_S_Uc  {
  unsigned int v1:17;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu17i_S_Uc) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_S_Uc()
{
  {
    init_simple_test("BFu17i_S_Uc");
    static STRUCT_IF_C BFu17i_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Uc");
    check_field_offset(lv, v2, 4, "BFu17i_S_Uc.v2");
    check_field_offset(lv, v3, 6, "BFu17i_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Uc, BFu17i_S_Uc)
//============================================================================


struct  BFu17i_S_Ui  {
  unsigned int v1:17;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu17i_S_Ui) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_S_Ui()
{
  {
    init_simple_test("BFu17i_S_Ui");
    static STRUCT_IF_C BFu17i_S_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_S_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Ui, BFu17i_S_Ui)
//============================================================================


struct  BFu17i_S_Ul  {
  unsigned int v1:17;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_S_Ul) C1{ Fi:17 Fs FL}



static void Test_BFu17i_S_Ul()
{
  {
    init_simple_test("BFu17i_S_Ul");
    static STRUCT_IF_C BFu17i_S_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Ul");
    check_field_offset(lv, v2, 4, "BFu17i_S_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Ul, BFu17i_S_Ul)
//============================================================================


struct  BFu17i_S_Us  {
  unsigned int v1:17;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu17i_S_Us) C1{ Fi:17 Fs[2]}



static void Test_BFu17i_S_Us()
{
  {
    init_simple_test("BFu17i_S_Us");
    static STRUCT_IF_C BFu17i_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Us");
    check_field_offset(lv, v2, 4, "BFu17i_S_Us.v2");
    check_field_offset(lv, v3, 6, "BFu17i_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Us, BFu17i_S_Us)
//============================================================================


struct  BFu17i_S_Vp  {
  unsigned int v1:17;
  short v2;
  void *v3;
};
//SIG(1 BFu17i_S_Vp) C1{ Fi:17 Fs Fp}



static void Test_BFu17i_S_Vp()
{
  {
    init_simple_test("BFu17i_S_Vp");
    static STRUCT_IF_C BFu17i_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_Vp");
    check_field_offset(lv, v2, 4, "BFu17i_S_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu17i_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_S_Vp, BFu17i_S_Vp)
//============================================================================


struct  BFu17i_Uc  {
  unsigned int v1:17;
  unsigned char v2;
};
//SIG(1 BFu17i_Uc) C1{ Fi:17 Fc}



static void Test_BFu17i_Uc()
{
  {
    init_simple_test("BFu17i_Uc");
    static STRUCT_IF_C BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc");
    check_field_offset(lv, v2, 3, "BFu17i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc, BFu17i_Uc)
//============================================================================


struct  BFu17i_Uc_BFu15i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Uc_BFu15i) C1{ Fi:17 Fc Fi:15}



static void Test_BFu17i_Uc_BFu15i()
{
  {
    init_simple_test("BFu17i_Uc_BFu15i");
    static STRUCT_IF_C BFu17i_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu15i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_Uc_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu15i, BFu17i_Uc_BFu15i)
//============================================================================


struct  BFu17i_Uc_BFu15ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Uc_BFu15ll) C1{ Fi:17 Fc FL:15}



static void Test_BFu17i_Uc_BFu15ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu15ll");
    static STRUCT_IF_C BFu17i_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu15ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu15ll, BFu17i_Uc_BFu15ll)
//============================================================================


struct  BFu17i_Uc_BFu15s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Uc_BFu15s) C1{ Fi:17 Fc Fs:15}



static void Test_BFu17i_Uc_BFu15s()
{
  {
    init_simple_test("BFu17i_Uc_BFu15s");
    static STRUCT_IF_C BFu17i_Uc_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu15s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_Uc_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu15s, BFu17i_Uc_BFu15s)
//============================================================================


struct  BFu17i_Uc_BFu16i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Uc_BFu16i) C1{ Fi:17 Fc Fi:16}



static void Test_BFu17i_Uc_BFu16i()
{
  {
    init_simple_test("BFu17i_Uc_BFu16i");
    static STRUCT_IF_C BFu17i_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu16i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_Uc_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu16i, BFu17i_Uc_BFu16i)
//============================================================================


struct  BFu17i_Uc_BFu16ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Uc_BFu16ll) C1{ Fi:17 Fc FL:16}



static void Test_BFu17i_Uc_BFu16ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu16ll");
    static STRUCT_IF_C BFu17i_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu16ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu16ll, BFu17i_Uc_BFu16ll)
//============================================================================


struct  BFu17i_Uc_BFu16s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Uc_BFu16s) C1{ Fi:17 Fc Fs:16}



static void Test_BFu17i_Uc_BFu16s()
{
  {
    init_simple_test("BFu17i_Uc_BFu16s");
    static STRUCT_IF_C BFu17i_Uc_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu16s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_Uc_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu16s, BFu17i_Uc_BFu16s)
//============================================================================


struct  BFu17i_Uc_BFu17i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Uc_BFu17i) C1{ Fi:17 Fc Fi:17}



static void Test_BFu17i_Uc_BFu17i()
{
  {
    init_simple_test("BFu17i_Uc_BFu17i");
    static STRUCT_IF_C BFu17i_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu17i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu17i, BFu17i_Uc_BFu17i)
//============================================================================


struct  BFu17i_Uc_BFu17ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Uc_BFu17ll) C1{ Fi:17 Fc FL:17}



static void Test_BFu17i_Uc_BFu17ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu17ll");
    static STRUCT_IF_C BFu17i_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu17ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu17ll, BFu17i_Uc_BFu17ll)
//============================================================================


struct  BFu17i_Uc_BFu1c  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Uc_BFu1c) C1{ Fi:17 Fc Fc:1}



static void Test_BFu17i_Uc_BFu1c()
{
  {
    init_simple_test("BFu17i_Uc_BFu1c");
    static STRUCT_IF_C BFu17i_Uc_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu1c");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu1c, BFu17i_Uc_BFu1c)
//============================================================================


struct  BFu17i_Uc_BFu1i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Uc_BFu1i) C1{ Fi:17 Fc Fi:1}



static void Test_BFu17i_Uc_BFu1i()
{
  {
    init_simple_test("BFu17i_Uc_BFu1i");
    static STRUCT_IF_C BFu17i_Uc_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu1i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu1i, BFu17i_Uc_BFu1i)
//============================================================================


struct  BFu17i_Uc_BFu1ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Uc_BFu1ll) C1{ Fi:17 Fc FL:1}



static void Test_BFu17i_Uc_BFu1ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu1ll");
    static STRUCT_IF_C BFu17i_Uc_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu1ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu1ll, BFu17i_Uc_BFu1ll)
//============================================================================


struct  BFu17i_Uc_BFu1s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Uc_BFu1s) C1{ Fi:17 Fc Fs:1}



static void Test_BFu17i_Uc_BFu1s()
{
  {
    init_simple_test("BFu17i_Uc_BFu1s");
    static STRUCT_IF_C BFu17i_Uc_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu1s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu1s, BFu17i_Uc_BFu1s)
//============================================================================


struct  BFu17i_Uc_BFu31i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Uc_BFu31i) C1{ Fi:17 Fc Fi:31}



static void Test_BFu17i_Uc_BFu31i()
{
  {
    init_simple_test("BFu17i_Uc_BFu31i");
    static STRUCT_IF_C BFu17i_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu31i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu31i, BFu17i_Uc_BFu31i)
//============================================================================


struct  BFu17i_Uc_BFu31ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Uc_BFu31ll) C1{ Fi:17 Fc FL:31}



static void Test_BFu17i_Uc_BFu31ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu31ll");
    static STRUCT_IF_C BFu17i_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu31ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu31ll, BFu17i_Uc_BFu31ll)
//============================================================================


struct  BFu17i_Uc_BFu32i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Uc_BFu32i) C1{ Fi:17 Fc Fi:32}



static void Test_BFu17i_Uc_BFu32i()
{
  {
    init_simple_test("BFu17i_Uc_BFu32i");
    static STRUCT_IF_C BFu17i_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu32i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu32i, BFu17i_Uc_BFu32i)
//============================================================================


struct  BFu17i_Uc_BFu32ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Uc_BFu32ll) C1{ Fi:17 Fc FL:32}



static void Test_BFu17i_Uc_BFu32ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu32ll");
    static STRUCT_IF_C BFu17i_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu32ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu32ll, BFu17i_Uc_BFu32ll)
//============================================================================


struct  BFu17i_Uc_BFu33  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Uc_BFu33) C1{ Fi:17 Fc FL:33}



static void Test_BFu17i_Uc_BFu33()
{
  {
    init_simple_test("BFu17i_Uc_BFu33");
    static STRUCT_IF_C BFu17i_Uc_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu33");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_Uc_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu33, BFu17i_Uc_BFu33)
//============================================================================


struct  BFu17i_Uc_BFu7c  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Uc_BFu7c) C1{ Fi:17 Fc Fc:7}



static void Test_BFu17i_Uc_BFu7c()
{
  {
    init_simple_test("BFu17i_Uc_BFu7c");
    static STRUCT_IF_C BFu17i_Uc_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu7c");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_Uc_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu7c, BFu17i_Uc_BFu7c)
//============================================================================


struct  BFu17i_Uc_BFu7i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Uc_BFu7i) C1{ Fi:17 Fc Fi:7}



static void Test_BFu17i_Uc_BFu7i()
{
  {
    init_simple_test("BFu17i_Uc_BFu7i");
    static STRUCT_IF_C BFu17i_Uc_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu7i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_Uc_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu7i, BFu17i_Uc_BFu7i)
//============================================================================


struct  BFu17i_Uc_BFu7ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Uc_BFu7ll) C1{ Fi:17 Fc FL:7}



static void Test_BFu17i_Uc_BFu7ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu7ll");
    static STRUCT_IF_C BFu17i_Uc_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu7ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu7ll, BFu17i_Uc_BFu7ll)
//============================================================================


struct  BFu17i_Uc_BFu7s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Uc_BFu7s) C1{ Fi:17 Fc Fs:7}



static void Test_BFu17i_Uc_BFu7s()
{
  {
    init_simple_test("BFu17i_Uc_BFu7s");
    static STRUCT_IF_C BFu17i_Uc_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu7s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_Uc_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu7s, BFu17i_Uc_BFu7s)
//============================================================================


struct  BFu17i_Uc_BFu8c  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Uc_BFu8c) C1{ Fi:17 Fc Fc:8}



static void Test_BFu17i_Uc_BFu8c()
{
  {
    init_simple_test("BFu17i_Uc_BFu8c");
    static STRUCT_IF_C BFu17i_Uc_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu8c");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_Uc_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu8c, BFu17i_Uc_BFu8c)
//============================================================================


struct  BFu17i_Uc_BFu8i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Uc_BFu8i) C1{ Fi:17 Fc Fi:8}



static void Test_BFu17i_Uc_BFu8i()
{
  {
    init_simple_test("BFu17i_Uc_BFu8i");
    static STRUCT_IF_C BFu17i_Uc_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu8i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_Uc_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu8i, BFu17i_Uc_BFu8i)
//============================================================================


struct  BFu17i_Uc_BFu8ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Uc_BFu8ll) C1{ Fi:17 Fc FL:8}



static void Test_BFu17i_Uc_BFu8ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu8ll");
    static STRUCT_IF_C BFu17i_Uc_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu8ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu8ll, BFu17i_Uc_BFu8ll)
//============================================================================


struct  BFu17i_Uc_BFu8s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Uc_BFu8s) C1{ Fi:17 Fc Fs:8}



static void Test_BFu17i_Uc_BFu8s()
{
  {
    init_simple_test("BFu17i_Uc_BFu8s");
    static STRUCT_IF_C BFu17i_Uc_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu8s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_Uc_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu8s, BFu17i_Uc_BFu8s)
//============================================================================


struct  BFu17i_Uc_BFu9i  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Uc_BFu9i) C1{ Fi:17 Fc Fi:9}



static void Test_BFu17i_Uc_BFu9i()
{
  {
    init_simple_test("BFu17i_Uc_BFu9i");
    static STRUCT_IF_C BFu17i_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu9i");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_Uc_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu9i, BFu17i_Uc_BFu9i)
//============================================================================


struct  BFu17i_Uc_BFu9ll  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Uc_BFu9ll) C1{ Fi:17 Fc FL:9}



static void Test_BFu17i_Uc_BFu9ll()
{
  {
    init_simple_test("BFu17i_Uc_BFu9ll");
    static STRUCT_IF_C BFu17i_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu9ll");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu9ll, BFu17i_Uc_BFu9ll)
//============================================================================


struct  BFu17i_Uc_BFu9s  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Uc_BFu9s) C1{ Fi:17 Fc Fs:9}



static void Test_BFu17i_Uc_BFu9s()
{
  {
    init_simple_test("BFu17i_Uc_BFu9s");
    static STRUCT_IF_C BFu17i_Uc_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_BFu9s");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_Uc_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_BFu9s, BFu17i_Uc_BFu9s)
//============================================================================


struct  BFu17i_Uc_C  {
  unsigned int v1:17;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu17i_Uc_C) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_Uc_C()
{
  {
    init_simple_test("BFu17i_Uc_C");
    static STRUCT_IF_C BFu17i_Uc_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_C");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_C.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_C, BFu17i_Uc_C)
//============================================================================


struct  BFu17i_Uc_D  {
  unsigned int v1:17;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu17i_Uc_D) C1{ Fi:17 Fc FL}



static void Test_BFu17i_Uc_D()
{
  {
    init_simple_test("BFu17i_Uc_D");
    static STRUCT_IF_C BFu17i_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_D");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_D, BFu17i_Uc_D)
//============================================================================


struct  BFu17i_Uc_F  {
  unsigned int v1:17;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu17i_Uc_F) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_Uc_F()
{
  {
    init_simple_test("BFu17i_Uc_F");
    static STRUCT_IF_C BFu17i_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_F");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_F, BFu17i_Uc_F)
//============================================================================


struct  BFu17i_Uc_I  {
  unsigned int v1:17;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu17i_Uc_I) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_Uc_I()
{
  {
    init_simple_test("BFu17i_Uc_I");
    static STRUCT_IF_C BFu17i_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_I");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_I, BFu17i_Uc_I)
//============================================================================


struct  BFu17i_Uc_Ip  {
  unsigned int v1:17;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu17i_Uc_Ip) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_Uc_Ip()
{
  {
    init_simple_test("BFu17i_Uc_Ip");
    static STRUCT_IF_C BFu17i_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Ip");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Ip, BFu17i_Uc_Ip)
//============================================================================


struct  BFu17i_Uc_L  {
  unsigned int v1:17;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Uc_L) C1{ Fi:17 Fc FL}



static void Test_BFu17i_Uc_L()
{
  {
    init_simple_test("BFu17i_Uc_L");
    static STRUCT_IF_C BFu17i_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_L");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_L, BFu17i_Uc_L)
//============================================================================


struct  BFu17i_Uc_S  {
  unsigned int v1:17;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu17i_Uc_S) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_Uc_S()
{
  {
    init_simple_test("BFu17i_Uc_S");
    static STRUCT_IF_C BFu17i_Uc_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_S");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_S.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_S, BFu17i_Uc_S)
//============================================================================


struct  BFu17i_Uc_Uc  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Uc_Uc) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_Uc_Uc()
{
  {
    init_simple_test("BFu17i_Uc_Uc");
    static STRUCT_IF_C BFu17i_Uc_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Uc");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Uc, BFu17i_Uc_Uc)
//============================================================================


struct  BFu17i_Uc_Ui  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Uc_Ui) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_Uc_Ui()
{
  {
    init_simple_test("BFu17i_Uc_Ui");
    static STRUCT_IF_C BFu17i_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Ui");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Ui, BFu17i_Uc_Ui)
//============================================================================


struct  BFu17i_Uc_Ul  {
  unsigned int v1:17;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Uc_Ul) C1{ Fi:17 Fc FL}



static void Test_BFu17i_Uc_Ul()
{
  {
    init_simple_test("BFu17i_Uc_Ul");
    static STRUCT_IF_C BFu17i_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Ul");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Ul, BFu17i_Uc_Ul)
//============================================================================


struct  BFu17i_Uc_Us  {
  unsigned int v1:17;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Uc_Us) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_Uc_Us()
{
  {
    init_simple_test("BFu17i_Uc_Us");
    static STRUCT_IF_C BFu17i_Uc_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Us");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Us.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Us, BFu17i_Uc_Us)
//============================================================================


struct  BFu17i_Uc_Vp  {
  unsigned int v1:17;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu17i_Uc_Vp) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_Uc_Vp()
{
  {
    init_simple_test("BFu17i_Uc_Vp");
    static STRUCT_IF_C BFu17i_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_Vp");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Uc_Vp, BFu17i_Uc_Vp)
//============================================================================


struct  BFu17i_Ui  {
  unsigned int v1:17;
  unsigned int v2;
};
//SIG(1 BFu17i_Ui) C1{ Fi:17 Fi}



static void Test_BFu17i_Ui()
{
  {
    init_simple_test("BFu17i_Ui");
    static STRUCT_IF_C BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui, BFu17i_Ui)
//============================================================================


struct  BFu17i_Ui_BFu15i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Ui_BFu15i) C1{ Fi:17 Fi Fi:15}



static void Test_BFu17i_Ui_BFu15i()
{
  {
    init_simple_test("BFu17i_Ui_BFu15i");
    static STRUCT_IF_C BFu17i_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu15i, BFu17i_Ui_BFu15i)
//============================================================================


struct  BFu17i_Ui_BFu15ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Ui_BFu15ll) C1{ Fi:17 Fi FL:15}



static void Test_BFu17i_Ui_BFu15ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu15ll");
    static STRUCT_IF_C BFu17i_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu15ll, BFu17i_Ui_BFu15ll)
//============================================================================


struct  BFu17i_Ui_BFu15s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Ui_BFu15s) C1{ Fi:17 Fi Fs:15}



static void Test_BFu17i_Ui_BFu15s()
{
  {
    init_simple_test("BFu17i_Ui_BFu15s");
    static STRUCT_IF_C BFu17i_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17i_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17i_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu15s, BFu17i_Ui_BFu15s)
//============================================================================


struct  BFu17i_Ui_BFu16i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Ui_BFu16i) C1{ Fi:17 Fi Fi:16}



static void Test_BFu17i_Ui_BFu16i()
{
  {
    init_simple_test("BFu17i_Ui_BFu16i");
    static STRUCT_IF_C BFu17i_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu16i, BFu17i_Ui_BFu16i)
//============================================================================


struct  BFu17i_Ui_BFu16ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Ui_BFu16ll) C1{ Fi:17 Fi FL:16}



static void Test_BFu17i_Ui_BFu16ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu16ll");
    static STRUCT_IF_C BFu17i_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu16ll, BFu17i_Ui_BFu16ll)
//============================================================================


struct  BFu17i_Ui_BFu16s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Ui_BFu16s) C1{ Fi:17 Fi Fs:16}



static void Test_BFu17i_Ui_BFu16s()
{
  {
    init_simple_test("BFu17i_Ui_BFu16s");
    static STRUCT_IF_C BFu17i_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17i_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17i_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu16s, BFu17i_Ui_BFu16s)
//============================================================================


struct  BFu17i_Ui_BFu17i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Ui_BFu17i) C1{ Fi:17 Fi Fi:17}



static void Test_BFu17i_Ui_BFu17i()
{
  {
    init_simple_test("BFu17i_Ui_BFu17i");
    static STRUCT_IF_C BFu17i_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu17i, BFu17i_Ui_BFu17i)
//============================================================================


struct  BFu17i_Ui_BFu17ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Ui_BFu17ll) C1{ Fi:17 Fi FL:17}



static void Test_BFu17i_Ui_BFu17ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu17ll");
    static STRUCT_IF_C BFu17i_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu17ll, BFu17i_Ui_BFu17ll)
//============================================================================


struct  BFu17i_Ui_BFu1c  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Ui_BFu1c) C1{ Fi:17 Fi Fc:1}



static void Test_BFu17i_Ui_BFu1c()
{
  {
    init_simple_test("BFu17i_Ui_BFu1c");
    static STRUCT_IF_C BFu17i_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu1c, BFu17i_Ui_BFu1c)
//============================================================================


struct  BFu17i_Ui_BFu1i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Ui_BFu1i) C1{ Fi:17 Fi Fi:1}



static void Test_BFu17i_Ui_BFu1i()
{
  {
    init_simple_test("BFu17i_Ui_BFu1i");
    static STRUCT_IF_C BFu17i_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu1i, BFu17i_Ui_BFu1i)
//============================================================================


struct  BFu17i_Ui_BFu1ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Ui_BFu1ll) C1{ Fi:17 Fi FL:1}



static void Test_BFu17i_Ui_BFu1ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu1ll");
    static STRUCT_IF_C BFu17i_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu1ll, BFu17i_Ui_BFu1ll)
//============================================================================


struct  BFu17i_Ui_BFu1s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Ui_BFu1s) C1{ Fi:17 Fi Fs:1}



static void Test_BFu17i_Ui_BFu1s()
{
  {
    init_simple_test("BFu17i_Ui_BFu1s");
    static STRUCT_IF_C BFu17i_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17i_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu1s, BFu17i_Ui_BFu1s)
//============================================================================


struct  BFu17i_Ui_BFu31i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Ui_BFu31i) C1{ Fi:17 Fi Fi:31}



static void Test_BFu17i_Ui_BFu31i()
{
  {
    init_simple_test("BFu17i_Ui_BFu31i");
    static STRUCT_IF_C BFu17i_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu31i, BFu17i_Ui_BFu31i)
//============================================================================


struct  BFu17i_Ui_BFu31ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Ui_BFu31ll) C1{ Fi:17 Fi FL:31}



static void Test_BFu17i_Ui_BFu31ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu31ll");
    static STRUCT_IF_C BFu17i_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu31ll, BFu17i_Ui_BFu31ll)
//============================================================================


struct  BFu17i_Ui_BFu32i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Ui_BFu32i) C1{ Fi:17 Fi Fi:32}



static void Test_BFu17i_Ui_BFu32i()
{
  {
    init_simple_test("BFu17i_Ui_BFu32i");
    static STRUCT_IF_C BFu17i_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu32i, BFu17i_Ui_BFu32i)
//============================================================================


struct  BFu17i_Ui_BFu32ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Ui_BFu32ll) C1{ Fi:17 Fi FL:32}



static void Test_BFu17i_Ui_BFu32ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu32ll");
    static STRUCT_IF_C BFu17i_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu32ll, BFu17i_Ui_BFu32ll)
//============================================================================


struct  BFu17i_Ui_BFu33  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Ui_BFu33) C1{ Fi:17 Fi FL:33}



static void Test_BFu17i_Ui_BFu33()
{
  {
    init_simple_test("BFu17i_Ui_BFu33");
    static STRUCT_IF_C BFu17i_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu17i_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu17i_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu33, BFu17i_Ui_BFu33)
//============================================================================


struct  BFu17i_Ui_BFu7c  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Ui_BFu7c) C1{ Fi:17 Fi Fc:7}



static void Test_BFu17i_Ui_BFu7c()
{
  {
    init_simple_test("BFu17i_Ui_BFu7c");
    static STRUCT_IF_C BFu17i_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu7c, BFu17i_Ui_BFu7c)
//============================================================================


struct  BFu17i_Ui_BFu7i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Ui_BFu7i) C1{ Fi:17 Fi Fi:7}



static void Test_BFu17i_Ui_BFu7i()
{
  {
    init_simple_test("BFu17i_Ui_BFu7i");
    static STRUCT_IF_C BFu17i_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu7i, BFu17i_Ui_BFu7i)
//============================================================================


struct  BFu17i_Ui_BFu7ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Ui_BFu7ll) C1{ Fi:17 Fi FL:7}



static void Test_BFu17i_Ui_BFu7ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu7ll");
    static STRUCT_IF_C BFu17i_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu7ll, BFu17i_Ui_BFu7ll)
//============================================================================


struct  BFu17i_Ui_BFu7s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Ui_BFu7s) C1{ Fi:17 Fi Fs:7}



static void Test_BFu17i_Ui_BFu7s()
{
  {
    init_simple_test("BFu17i_Ui_BFu7s");
    static STRUCT_IF_C BFu17i_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17i_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17i_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu7s, BFu17i_Ui_BFu7s)
//============================================================================


struct  BFu17i_Ui_BFu8c  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Ui_BFu8c) C1{ Fi:17 Fi Fc:8}



static void Test_BFu17i_Ui_BFu8c()
{
  {
    init_simple_test("BFu17i_Ui_BFu8c");
    static STRUCT_IF_C BFu17i_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu8c, BFu17i_Ui_BFu8c)
//============================================================================


struct  BFu17i_Ui_BFu8i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Ui_BFu8i) C1{ Fi:17 Fi Fi:8}



static void Test_BFu17i_Ui_BFu8i()
{
  {
    init_simple_test("BFu17i_Ui_BFu8i");
    static STRUCT_IF_C BFu17i_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu8i, BFu17i_Ui_BFu8i)
//============================================================================


struct  BFu17i_Ui_BFu8ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Ui_BFu8ll) C1{ Fi:17 Fi FL:8}



static void Test_BFu17i_Ui_BFu8ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu8ll");
    static STRUCT_IF_C BFu17i_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu8ll, BFu17i_Ui_BFu8ll)
//============================================================================


struct  BFu17i_Ui_BFu8s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Ui_BFu8s) C1{ Fi:17 Fi Fs:8}



static void Test_BFu17i_Ui_BFu8s()
{
  {
    init_simple_test("BFu17i_Ui_BFu8s");
    static STRUCT_IF_C BFu17i_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17i_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17i_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu8s, BFu17i_Ui_BFu8s)
//============================================================================


struct  BFu17i_Ui_BFu9i  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Ui_BFu9i) C1{ Fi:17 Fi Fi:9}



static void Test_BFu17i_Ui_BFu9i()
{
  {
    init_simple_test("BFu17i_Ui_BFu9i");
    static STRUCT_IF_C BFu17i_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu9i, BFu17i_Ui_BFu9i)
//============================================================================


struct  BFu17i_Ui_BFu9ll  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Ui_BFu9ll) C1{ Fi:17 Fi FL:9}



static void Test_BFu17i_Ui_BFu9ll()
{
  {
    init_simple_test("BFu17i_Ui_BFu9ll");
    static STRUCT_IF_C BFu17i_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu9ll, BFu17i_Ui_BFu9ll)
//============================================================================


struct  BFu17i_Ui_BFu9s  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Ui_BFu9s) C1{ Fi:17 Fi Fs:9}



static void Test_BFu17i_Ui_BFu9s()
{
  {
    init_simple_test("BFu17i_Ui_BFu9s");
    static STRUCT_IF_C BFu17i_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17i_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17i_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_BFu9s, BFu17i_Ui_BFu9s)
//============================================================================


struct  BFu17i_Ui_C  {
  unsigned int v1:17;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu17i_Ui_C) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_Ui_C()
{
  {
    init_simple_test("BFu17i_Ui_C");
    static STRUCT_IF_C BFu17i_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_C");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_C, BFu17i_Ui_C)
//============================================================================


struct  BFu17i_Ui_D  {
  unsigned int v1:17;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu17i_Ui_D) C1{ Fi:17 Fi FL}



static void Test_BFu17i_Ui_D()
{
  {
    init_simple_test("BFu17i_Ui_D");
    static STRUCT_IF_C BFu17i_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_D");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_D, BFu17i_Ui_D)
//============================================================================


struct  BFu17i_Ui_F  {
  unsigned int v1:17;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu17i_Ui_F) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_Ui_F()
{
  {
    init_simple_test("BFu17i_Ui_F");
    static STRUCT_IF_C BFu17i_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_F");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_F, BFu17i_Ui_F)
//============================================================================


struct  BFu17i_Ui_I  {
  unsigned int v1:17;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu17i_Ui_I) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_Ui_I()
{
  {
    init_simple_test("BFu17i_Ui_I");
    static STRUCT_IF_C BFu17i_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_I");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_I, BFu17i_Ui_I)
//============================================================================


struct  BFu17i_Ui_Ip  {
  unsigned int v1:17;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu17i_Ui_Ip) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_Ui_Ip()
{
  {
    init_simple_test("BFu17i_Ui_Ip");
    static STRUCT_IF_C BFu17i_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Ip, BFu17i_Ui_Ip)
//============================================================================


struct  BFu17i_Ui_L  {
  unsigned int v1:17;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Ui_L) C1{ Fi:17 Fi FL}



static void Test_BFu17i_Ui_L()
{
  {
    init_simple_test("BFu17i_Ui_L");
    static STRUCT_IF_C BFu17i_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_L");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_L, BFu17i_Ui_L)
//============================================================================


struct  BFu17i_Ui_S  {
  unsigned int v1:17;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu17i_Ui_S) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_Ui_S()
{
  {
    init_simple_test("BFu17i_Ui_S");
    static STRUCT_IF_C BFu17i_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_S");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_S, BFu17i_Ui_S)
//============================================================================


struct  BFu17i_Ui_Uc  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Ui_Uc) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_Ui_Uc()
{
  {
    init_simple_test("BFu17i_Ui_Uc");
    static STRUCT_IF_C BFu17i_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Uc, BFu17i_Ui_Uc)
//============================================================================


struct  BFu17i_Ui_Ui  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Ui_Ui) C1{ Fi:17 Fi[2]}



static void Test_BFu17i_Ui_Ui()
{
  {
    init_simple_test("BFu17i_Ui_Ui");
    static STRUCT_IF_C BFu17i_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Ui, BFu17i_Ui_Ui)
//============================================================================


struct  BFu17i_Ui_Ul  {
  unsigned int v1:17;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Ui_Ul) C1{ Fi:17 Fi FL}



static void Test_BFu17i_Ui_Ul()
{
  {
    init_simple_test("BFu17i_Ui_Ul");
    static STRUCT_IF_C BFu17i_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Ul, BFu17i_Ui_Ul)
//============================================================================


struct  BFu17i_Ui_Us  {
  unsigned int v1:17;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Ui_Us) C1{ Fi:17 Fi Fs}



static void Test_BFu17i_Ui_Us()
{
  {
    init_simple_test("BFu17i_Ui_Us");
    static STRUCT_IF_C BFu17i_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Us, BFu17i_Ui_Us)
//============================================================================


struct  BFu17i_Ui_Vp  {
  unsigned int v1:17;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu17i_Ui_Vp) C1{ Fi:17 Fi Fp}



static void Test_BFu17i_Ui_Vp()
{
  {
    init_simple_test("BFu17i_Ui_Vp");
    static STRUCT_IF_C BFu17i_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ui_Vp, BFu17i_Ui_Vp)
//============================================================================


struct  BFu17i_Ul  {
  unsigned int v1:17;
  __tsu64 v2;
};
//SIG(1 BFu17i_Ul) C1{ Fi:17 FL}



static void Test_BFu17i_Ul()
{
  {
    init_simple_test("BFu17i_Ul");
    static STRUCT_IF_C BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul, BFu17i_Ul)
//============================================================================


struct  BFu17i_Ul_BFu15i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Ul_BFu15i) C1{ Fi:17 FL Fi:15}



static void Test_BFu17i_Ul_BFu15i()
{
  {
    init_simple_test("BFu17i_Ul_BFu15i");
    static STRUCT_IF_C BFu17i_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu15i, BFu17i_Ul_BFu15i)
//============================================================================


struct  BFu17i_Ul_BFu15ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Ul_BFu15ll) C1{ Fi:17 FL FL:15}



static void Test_BFu17i_Ul_BFu15ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu15ll");
    static STRUCT_IF_C BFu17i_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu15ll, BFu17i_Ul_BFu15ll)
//============================================================================


struct  BFu17i_Ul_BFu15s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Ul_BFu15s) C1{ Fi:17 FL Fs:15}



static void Test_BFu17i_Ul_BFu15s()
{
  {
    init_simple_test("BFu17i_Ul_BFu15s");
    static STRUCT_IF_C BFu17i_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu17i_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu17i_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu15s, BFu17i_Ul_BFu15s)
//============================================================================


struct  BFu17i_Ul_BFu16i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Ul_BFu16i) C1{ Fi:17 FL Fi:16}



static void Test_BFu17i_Ul_BFu16i()
{
  {
    init_simple_test("BFu17i_Ul_BFu16i");
    static STRUCT_IF_C BFu17i_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu16i, BFu17i_Ul_BFu16i)
//============================================================================


struct  BFu17i_Ul_BFu16ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Ul_BFu16ll) C1{ Fi:17 FL FL:16}



static void Test_BFu17i_Ul_BFu16ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu16ll");
    static STRUCT_IF_C BFu17i_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu16ll, BFu17i_Ul_BFu16ll)
//============================================================================


struct  BFu17i_Ul_BFu16s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Ul_BFu16s) C1{ Fi:17 FL Fs:16}



static void Test_BFu17i_Ul_BFu16s()
{
  {
    init_simple_test("BFu17i_Ul_BFu16s");
    static STRUCT_IF_C BFu17i_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu17i_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu17i_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu16s, BFu17i_Ul_BFu16s)
//============================================================================


struct  BFu17i_Ul_BFu17i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Ul_BFu17i) C1{ Fi:17 FL Fi:17}



static void Test_BFu17i_Ul_BFu17i()
{
  {
    init_simple_test("BFu17i_Ul_BFu17i");
    static STRUCT_IF_C BFu17i_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu17i, BFu17i_Ul_BFu17i)
//============================================================================


struct  BFu17i_Ul_BFu17ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Ul_BFu17ll) C1{ Fi:17 FL FL:17}



static void Test_BFu17i_Ul_BFu17ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu17ll");
    static STRUCT_IF_C BFu17i_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu17i_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu17ll, BFu17i_Ul_BFu17ll)
//============================================================================


struct  BFu17i_Ul_BFu1c  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Ul_BFu1c) C1{ Fi:17 FL Fc:1}



static void Test_BFu17i_Ul_BFu1c()
{
  {
    init_simple_test("BFu17i_Ul_BFu1c");
    static STRUCT_IF_C BFu17i_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu1c, BFu17i_Ul_BFu1c)
//============================================================================


struct  BFu17i_Ul_BFu1i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Ul_BFu1i) C1{ Fi:17 FL Fi:1}



static void Test_BFu17i_Ul_BFu1i()
{
  {
    init_simple_test("BFu17i_Ul_BFu1i");
    static STRUCT_IF_C BFu17i_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu1i, BFu17i_Ul_BFu1i)
//============================================================================


struct  BFu17i_Ul_BFu1ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Ul_BFu1ll) C1{ Fi:17 FL FL:1}



static void Test_BFu17i_Ul_BFu1ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu1ll");
    static STRUCT_IF_C BFu17i_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu1ll, BFu17i_Ul_BFu1ll)
//============================================================================


struct  BFu17i_Ul_BFu1s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Ul_BFu1s) C1{ Fi:17 FL Fs:1}



static void Test_BFu17i_Ul_BFu1s()
{
  {
    init_simple_test("BFu17i_Ul_BFu1s");
    static STRUCT_IF_C BFu17i_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu17i_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu1s, BFu17i_Ul_BFu1s)
//============================================================================


struct  BFu17i_Ul_BFu31i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Ul_BFu31i) C1{ Fi:17 FL Fi:31}



static void Test_BFu17i_Ul_BFu31i()
{
  {
    init_simple_test("BFu17i_Ul_BFu31i");
    static STRUCT_IF_C BFu17i_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu31i, BFu17i_Ul_BFu31i)
//============================================================================


struct  BFu17i_Ul_BFu31ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Ul_BFu31ll) C1{ Fi:17 FL FL:31}



static void Test_BFu17i_Ul_BFu31ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu31ll");
    static STRUCT_IF_C BFu17i_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu17i_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu17i_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu31ll, BFu17i_Ul_BFu31ll)
//============================================================================


struct  BFu17i_Ul_BFu32i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Ul_BFu32i) C1{ Fi:17 FL Fi:32}



static void Test_BFu17i_Ul_BFu32i()
{
  {
    init_simple_test("BFu17i_Ul_BFu32i");
    static STRUCT_IF_C BFu17i_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu32i, BFu17i_Ul_BFu32i)
//============================================================================


struct  BFu17i_Ul_BFu32ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Ul_BFu32ll) C1{ Fi:17 FL FL:32}



static void Test_BFu17i_Ul_BFu32ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu32ll");
    static STRUCT_IF_C BFu17i_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu17i_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu17i_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu32ll, BFu17i_Ul_BFu32ll)
//============================================================================


struct  BFu17i_Ul_BFu33  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Ul_BFu33) C1{ Fi:17 FL FL:33}



static void Test_BFu17i_Ul_BFu33()
{
  {
    init_simple_test("BFu17i_Ul_BFu33");
    static STRUCT_IF_C BFu17i_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu17i_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu17i_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu33, BFu17i_Ul_BFu33)
//============================================================================


struct  BFu17i_Ul_BFu7c  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Ul_BFu7c) C1{ Fi:17 FL Fc:7}



static void Test_BFu17i_Ul_BFu7c()
{
  {
    init_simple_test("BFu17i_Ul_BFu7c");
    static STRUCT_IF_C BFu17i_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu7c, BFu17i_Ul_BFu7c)
//============================================================================


struct  BFu17i_Ul_BFu7i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Ul_BFu7i) C1{ Fi:17 FL Fi:7}



static void Test_BFu17i_Ul_BFu7i()
{
  {
    init_simple_test("BFu17i_Ul_BFu7i");
    static STRUCT_IF_C BFu17i_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu7i, BFu17i_Ul_BFu7i)
//============================================================================


struct  BFu17i_Ul_BFu7ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Ul_BFu7ll) C1{ Fi:17 FL FL:7}



static void Test_BFu17i_Ul_BFu7ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu7ll");
    static STRUCT_IF_C BFu17i_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu7ll, BFu17i_Ul_BFu7ll)
//============================================================================


struct  BFu17i_Ul_BFu7s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Ul_BFu7s) C1{ Fi:17 FL Fs:7}



static void Test_BFu17i_Ul_BFu7s()
{
  {
    init_simple_test("BFu17i_Ul_BFu7s");
    static STRUCT_IF_C BFu17i_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu17i_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu17i_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu7s, BFu17i_Ul_BFu7s)
//============================================================================


struct  BFu17i_Ul_BFu8c  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Ul_BFu8c) C1{ Fi:17 FL Fc:8}



static void Test_BFu17i_Ul_BFu8c()
{
  {
    init_simple_test("BFu17i_Ul_BFu8c");
    static STRUCT_IF_C BFu17i_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu8c, BFu17i_Ul_BFu8c)
//============================================================================


struct  BFu17i_Ul_BFu8i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Ul_BFu8i) C1{ Fi:17 FL Fi:8}



static void Test_BFu17i_Ul_BFu8i()
{
  {
    init_simple_test("BFu17i_Ul_BFu8i");
    static STRUCT_IF_C BFu17i_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu8i, BFu17i_Ul_BFu8i)
//============================================================================


struct  BFu17i_Ul_BFu8ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Ul_BFu8ll) C1{ Fi:17 FL FL:8}



static void Test_BFu17i_Ul_BFu8ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu8ll");
    static STRUCT_IF_C BFu17i_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu8ll, BFu17i_Ul_BFu8ll)
//============================================================================


struct  BFu17i_Ul_BFu8s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Ul_BFu8s) C1{ Fi:17 FL Fs:8}



static void Test_BFu17i_Ul_BFu8s()
{
  {
    init_simple_test("BFu17i_Ul_BFu8s");
    static STRUCT_IF_C BFu17i_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu17i_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu17i_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu8s, BFu17i_Ul_BFu8s)
//============================================================================


struct  BFu17i_Ul_BFu9i  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Ul_BFu9i) C1{ Fi:17 FL Fi:9}



static void Test_BFu17i_Ul_BFu9i()
{
  {
    init_simple_test("BFu17i_Ul_BFu9i");
    static STRUCT_IF_C BFu17i_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu9i, BFu17i_Ul_BFu9i)
//============================================================================


struct  BFu17i_Ul_BFu9ll  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Ul_BFu9ll) C1{ Fi:17 FL FL:9}



static void Test_BFu17i_Ul_BFu9ll()
{
  {
    init_simple_test("BFu17i_Ul_BFu9ll");
    static STRUCT_IF_C BFu17i_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu9ll, BFu17i_Ul_BFu9ll)
//============================================================================


struct  BFu17i_Ul_BFu9s  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Ul_BFu9s) C1{ Fi:17 FL Fs:9}



static void Test_BFu17i_Ul_BFu9s()
{
  {
    init_simple_test("BFu17i_Ul_BFu9s");
    static STRUCT_IF_C BFu17i_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu17i_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu17i_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_BFu9s, BFu17i_Ul_BFu9s)
//============================================================================


struct  BFu17i_Ul_C  {
  unsigned int v1:17;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu17i_Ul_C) C1{ Fi:17 FL Fc}



static void Test_BFu17i_Ul_C()
{
  {
    init_simple_test("BFu17i_Ul_C");
    static STRUCT_IF_C BFu17i_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_C, BFu17i_Ul_C)
//============================================================================


struct  BFu17i_Ul_D  {
  unsigned int v1:17;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu17i_Ul_D) C1{ Fi:17 FL[2]}



static void Test_BFu17i_Ul_D()
{
  {
    init_simple_test("BFu17i_Ul_D");
    static STRUCT_IF_C BFu17i_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_D, BFu17i_Ul_D)
//============================================================================


struct  BFu17i_Ul_F  {
  unsigned int v1:17;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu17i_Ul_F) C1{ Fi:17 FL Fi}



static void Test_BFu17i_Ul_F()
{
  {
    init_simple_test("BFu17i_Ul_F");
    static STRUCT_IF_C BFu17i_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_F, BFu17i_Ul_F)
//============================================================================


struct  BFu17i_Ul_I  {
  unsigned int v1:17;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu17i_Ul_I) C1{ Fi:17 FL Fi}



static void Test_BFu17i_Ul_I()
{
  {
    init_simple_test("BFu17i_Ul_I");
    static STRUCT_IF_C BFu17i_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_I, BFu17i_Ul_I)
//============================================================================


struct  BFu17i_Ul_Ip  {
  unsigned int v1:17;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu17i_Ul_Ip) C1{ Fi:17 FL Fp}



static void Test_BFu17i_Ul_Ip()
{
  {
    init_simple_test("BFu17i_Ul_Ip");
    static STRUCT_IF_C BFu17i_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Ip, BFu17i_Ul_Ip)
//============================================================================


struct  BFu17i_Ul_L  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Ul_L) C1{ Fi:17 FL[2]}



static void Test_BFu17i_Ul_L()
{
  {
    init_simple_test("BFu17i_Ul_L");
    static STRUCT_IF_C BFu17i_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_L, BFu17i_Ul_L)
//============================================================================


struct  BFu17i_Ul_S  {
  unsigned int v1:17;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu17i_Ul_S) C1{ Fi:17 FL Fs}



static void Test_BFu17i_Ul_S()
{
  {
    init_simple_test("BFu17i_Ul_S");
    static STRUCT_IF_C BFu17i_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_S, BFu17i_Ul_S)
//============================================================================


struct  BFu17i_Ul_Uc  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Ul_Uc) C1{ Fi:17 FL Fc}



static void Test_BFu17i_Ul_Uc()
{
  {
    init_simple_test("BFu17i_Ul_Uc");
    static STRUCT_IF_C BFu17i_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Uc, BFu17i_Ul_Uc)
//============================================================================


struct  BFu17i_Ul_Ui  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Ul_Ui) C1{ Fi:17 FL Fi}



static void Test_BFu17i_Ul_Ui()
{
  {
    init_simple_test("BFu17i_Ul_Ui");
    static STRUCT_IF_C BFu17i_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Ui, BFu17i_Ul_Ui)
//============================================================================


struct  BFu17i_Ul_Ul  {
  unsigned int v1:17;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Ul_Ul) C1{ Fi:17 FL[2]}



static void Test_BFu17i_Ul_Ul()
{
  {
    init_simple_test("BFu17i_Ul_Ul");
    static STRUCT_IF_C BFu17i_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu17i_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Ul, BFu17i_Ul_Ul)
//============================================================================


struct  BFu17i_Ul_Us  {
  unsigned int v1:17;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Ul_Us) C1{ Fi:17 FL Fs}



static void Test_BFu17i_Ul_Us()
{
  {
    init_simple_test("BFu17i_Ul_Us");
    static STRUCT_IF_C BFu17i_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Us, BFu17i_Ul_Us)
//============================================================================


struct  BFu17i_Ul_Vp  {
  unsigned int v1:17;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu17i_Ul_Vp) C1{ Fi:17 FL Fp}



static void Test_BFu17i_Ul_Vp()
{
  {
    init_simple_test("BFu17i_Ul_Vp");
    static STRUCT_IF_C BFu17i_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Ul_Vp, BFu17i_Ul_Vp)
//============================================================================


struct  BFu17i_Us  {
  unsigned int v1:17;
  unsigned short v2;
};
//SIG(1 BFu17i_Us) C1{ Fi:17 Fs}



static void Test_BFu17i_Us()
{
  {
    init_simple_test("BFu17i_Us");
    static STRUCT_IF_C BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us");
    check_field_offset(lv, v2, 4, "BFu17i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us, BFu17i_Us)
//============================================================================


struct  BFu17i_Us_BFu15i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Us_BFu15i) C1{ Fi:17 Fs Fi:15}



static void Test_BFu17i_Us_BFu15i()
{
  {
    init_simple_test("BFu17i_Us_BFu15i");
    static STRUCT_IF_C BFu17i_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu15i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_Us_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu15i, BFu17i_Us_BFu15i)
//============================================================================


struct  BFu17i_Us_BFu15ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Us_BFu15ll) C1{ Fi:17 Fs FL:15}



static void Test_BFu17i_Us_BFu15ll()
{
  {
    init_simple_test("BFu17i_Us_BFu15ll");
    static STRUCT_IF_C BFu17i_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_Us_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu15ll, BFu17i_Us_BFu15ll)
//============================================================================


struct  BFu17i_Us_BFu15s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Us_BFu15s) C1{ Fi:17 Fs Fs:15}



static void Test_BFu17i_Us_BFu15s()
{
  {
    init_simple_test("BFu17i_Us_BFu15s");
    static STRUCT_IF_C BFu17i_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu15s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17i_Us_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17i_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu15s, BFu17i_Us_BFu15s)
//============================================================================


struct  BFu17i_Us_BFu16i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Us_BFu16i) C1{ Fi:17 Fs Fi:16}



static void Test_BFu17i_Us_BFu16i()
{
  {
    init_simple_test("BFu17i_Us_BFu16i");
    static STRUCT_IF_C BFu17i_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu16i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_Us_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu16i, BFu17i_Us_BFu16i)
//============================================================================


struct  BFu17i_Us_BFu16ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Us_BFu16ll) C1{ Fi:17 Fs FL:16}



static void Test_BFu17i_Us_BFu16ll()
{
  {
    init_simple_test("BFu17i_Us_BFu16ll");
    static STRUCT_IF_C BFu17i_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_Us_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu16ll, BFu17i_Us_BFu16ll)
//============================================================================


struct  BFu17i_Us_BFu16s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Us_BFu16s) C1{ Fi:17 Fs Fs:16}



static void Test_BFu17i_Us_BFu16s()
{
  {
    init_simple_test("BFu17i_Us_BFu16s");
    static STRUCT_IF_C BFu17i_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu16s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17i_Us_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17i_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu16s, BFu17i_Us_BFu16s)
//============================================================================


struct  BFu17i_Us_BFu17i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Us_BFu17i) C1{ Fi:17 Fs Fi:17}



static void Test_BFu17i_Us_BFu17i()
{
  {
    init_simple_test("BFu17i_Us_BFu17i");
    static STRUCT_IF_C BFu17i_Us_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu17i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17i_Us_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu17i, BFu17i_Us_BFu17i)
//============================================================================


struct  BFu17i_Us_BFu17ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Us_BFu17ll) C1{ Fi:17 Fs FL:17}



static void Test_BFu17i_Us_BFu17ll()
{
  {
    init_simple_test("BFu17i_Us_BFu17ll");
    static STRUCT_IF_C BFu17i_Us_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17i_Us_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu17ll, BFu17i_Us_BFu17ll)
//============================================================================


struct  BFu17i_Us_BFu1c  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Us_BFu1c) C1{ Fi:17 Fs Fc:1}



static void Test_BFu17i_Us_BFu1c()
{
  {
    init_simple_test("BFu17i_Us_BFu1c");
    static STRUCT_IF_C BFu17i_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu1c");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu1c, BFu17i_Us_BFu1c)
//============================================================================


struct  BFu17i_Us_BFu1i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Us_BFu1i) C1{ Fi:17 Fs Fi:1}



static void Test_BFu17i_Us_BFu1i()
{
  {
    init_simple_test("BFu17i_Us_BFu1i");
    static STRUCT_IF_C BFu17i_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu1i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu1i, BFu17i_Us_BFu1i)
//============================================================================


struct  BFu17i_Us_BFu1ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Us_BFu1ll) C1{ Fi:17 Fs FL:1}



static void Test_BFu17i_Us_BFu1ll()
{
  {
    init_simple_test("BFu17i_Us_BFu1ll");
    static STRUCT_IF_C BFu17i_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu1ll, BFu17i_Us_BFu1ll)
//============================================================================


struct  BFu17i_Us_BFu1s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Us_BFu1s) C1{ Fi:17 Fs Fs:1}



static void Test_BFu17i_Us_BFu1s()
{
  {
    init_simple_test("BFu17i_Us_BFu1s");
    static STRUCT_IF_C BFu17i_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu1s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17i_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu1s, BFu17i_Us_BFu1s)
//============================================================================


struct  BFu17i_Us_BFu31i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Us_BFu31i) C1{ Fi:17 Fs Fi:31}



static void Test_BFu17i_Us_BFu31i()
{
  {
    init_simple_test("BFu17i_Us_BFu31i");
    static STRUCT_IF_C BFu17i_Us_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu31i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17i_Us_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17i_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu31i, BFu17i_Us_BFu31i)
//============================================================================


struct  BFu17i_Us_BFu31ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Us_BFu31ll) C1{ Fi:17 Fs FL:31}



static void Test_BFu17i_Us_BFu31ll()
{
  {
    init_simple_test("BFu17i_Us_BFu31ll");
    static STRUCT_IF_C BFu17i_Us_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17i_Us_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17i_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu31ll, BFu17i_Us_BFu31ll)
//============================================================================


struct  BFu17i_Us_BFu32i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Us_BFu32i) C1{ Fi:17 Fs Fi:32}



static void Test_BFu17i_Us_BFu32i()
{
  {
    init_simple_test("BFu17i_Us_BFu32i");
    static STRUCT_IF_C BFu17i_Us_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu32i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17i_Us_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17i_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu32i, BFu17i_Us_BFu32i)
//============================================================================


struct  BFu17i_Us_BFu32ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Us_BFu32ll) C1{ Fi:17 Fs FL:32}



static void Test_BFu17i_Us_BFu32ll()
{
  {
    init_simple_test("BFu17i_Us_BFu32ll");
    static STRUCT_IF_C BFu17i_Us_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17i_Us_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17i_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu32ll, BFu17i_Us_BFu32ll)
//============================================================================


struct  BFu17i_Us_BFu33  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Us_BFu33) C1{ Fi:17 Fs FL:33}



static void Test_BFu17i_Us_BFu33()
{
  {
    init_simple_test("BFu17i_Us_BFu33");
    static STRUCT_IF_C BFu17i_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu33");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17i_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17i_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu33, BFu17i_Us_BFu33)
//============================================================================


struct  BFu17i_Us_BFu7c  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Us_BFu7c) C1{ Fi:17 Fs Fc:7}



static void Test_BFu17i_Us_BFu7c()
{
  {
    init_simple_test("BFu17i_Us_BFu7c");
    static STRUCT_IF_C BFu17i_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu7c");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_Us_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu7c, BFu17i_Us_BFu7c)
//============================================================================


struct  BFu17i_Us_BFu7i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Us_BFu7i) C1{ Fi:17 Fs Fi:7}



static void Test_BFu17i_Us_BFu7i()
{
  {
    init_simple_test("BFu17i_Us_BFu7i");
    static STRUCT_IF_C BFu17i_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu7i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_Us_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu7i, BFu17i_Us_BFu7i)
//============================================================================


struct  BFu17i_Us_BFu7ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Us_BFu7ll) C1{ Fi:17 Fs FL:7}



static void Test_BFu17i_Us_BFu7ll()
{
  {
    init_simple_test("BFu17i_Us_BFu7ll");
    static STRUCT_IF_C BFu17i_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_Us_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu7ll, BFu17i_Us_BFu7ll)
//============================================================================


struct  BFu17i_Us_BFu7s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Us_BFu7s) C1{ Fi:17 Fs Fs:7}



static void Test_BFu17i_Us_BFu7s()
{
  {
    init_simple_test("BFu17i_Us_BFu7s");
    static STRUCT_IF_C BFu17i_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu7s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17i_Us_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17i_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu7s, BFu17i_Us_BFu7s)
//============================================================================


struct  BFu17i_Us_BFu8c  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Us_BFu8c) C1{ Fi:17 Fs Fc:8}



static void Test_BFu17i_Us_BFu8c()
{
  {
    init_simple_test("BFu17i_Us_BFu8c");
    static STRUCT_IF_C BFu17i_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu8c");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_Us_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu8c, BFu17i_Us_BFu8c)
//============================================================================


struct  BFu17i_Us_BFu8i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Us_BFu8i) C1{ Fi:17 Fs Fi:8}



static void Test_BFu17i_Us_BFu8i()
{
  {
    init_simple_test("BFu17i_Us_BFu8i");
    static STRUCT_IF_C BFu17i_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu8i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_Us_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu8i, BFu17i_Us_BFu8i)
//============================================================================


struct  BFu17i_Us_BFu8ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Us_BFu8ll) C1{ Fi:17 Fs FL:8}



static void Test_BFu17i_Us_BFu8ll()
{
  {
    init_simple_test("BFu17i_Us_BFu8ll");
    static STRUCT_IF_C BFu17i_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_Us_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu8ll, BFu17i_Us_BFu8ll)
//============================================================================


struct  BFu17i_Us_BFu8s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Us_BFu8s) C1{ Fi:17 Fs Fs:8}



static void Test_BFu17i_Us_BFu8s()
{
  {
    init_simple_test("BFu17i_Us_BFu8s");
    static STRUCT_IF_C BFu17i_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu8s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17i_Us_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17i_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu8s, BFu17i_Us_BFu8s)
//============================================================================


struct  BFu17i_Us_BFu9i  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Us_BFu9i) C1{ Fi:17 Fs Fi:9}



static void Test_BFu17i_Us_BFu9i()
{
  {
    init_simple_test("BFu17i_Us_BFu9i");
    static STRUCT_IF_C BFu17i_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu9i");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_Us_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu9i, BFu17i_Us_BFu9i)
//============================================================================


struct  BFu17i_Us_BFu9ll  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Us_BFu9ll) C1{ Fi:17 Fs FL:9}



static void Test_BFu17i_Us_BFu9ll()
{
  {
    init_simple_test("BFu17i_Us_BFu9ll");
    static STRUCT_IF_C BFu17i_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_Us_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu9ll, BFu17i_Us_BFu9ll)
//============================================================================


struct  BFu17i_Us_BFu9s  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Us_BFu9s) C1{ Fi:17 Fs Fs:9}



static void Test_BFu17i_Us_BFu9s()
{
  {
    init_simple_test("BFu17i_Us_BFu9s");
    static STRUCT_IF_C BFu17i_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_BFu9s");
    check_field_offset(lv, v2, 4, "BFu17i_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17i_Us_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17i_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_BFu9s, BFu17i_Us_BFu9s)
//============================================================================


struct  BFu17i_Us_C  {
  unsigned int v1:17;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu17i_Us_C) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_Us_C()
{
  {
    init_simple_test("BFu17i_Us_C");
    static STRUCT_IF_C BFu17i_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_C");
    check_field_offset(lv, v2, 4, "BFu17i_Us_C.v2");
    check_field_offset(lv, v3, 6, "BFu17i_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_C, BFu17i_Us_C)
//============================================================================


struct  BFu17i_Us_D  {
  unsigned int v1:17;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu17i_Us_D) C1{ Fi:17 Fs FL}



static void Test_BFu17i_Us_D()
{
  {
    init_simple_test("BFu17i_Us_D");
    static STRUCT_IF_C BFu17i_Us_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_D");
    check_field_offset(lv, v2, 4, "BFu17i_Us_D.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_D, BFu17i_Us_D)
//============================================================================


struct  BFu17i_Us_F  {
  unsigned int v1:17;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu17i_Us_F) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_Us_F()
{
  {
    init_simple_test("BFu17i_Us_F");
    static STRUCT_IF_C BFu17i_Us_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_F");
    check_field_offset(lv, v2, 4, "BFu17i_Us_F.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_F, BFu17i_Us_F)
//============================================================================


struct  BFu17i_Us_I  {
  unsigned int v1:17;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu17i_Us_I) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_Us_I()
{
  {
    init_simple_test("BFu17i_Us_I");
    static STRUCT_IF_C BFu17i_Us_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_I");
    check_field_offset(lv, v2, 4, "BFu17i_Us_I.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_I, BFu17i_Us_I)
//============================================================================


struct  BFu17i_Us_Ip  {
  unsigned int v1:17;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu17i_Us_Ip) C1{ Fi:17 Fs Fp}



static void Test_BFu17i_Us_Ip()
{
  {
    init_simple_test("BFu17i_Us_Ip");
    static STRUCT_IF_C BFu17i_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Ip");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Ip, BFu17i_Us_Ip)
//============================================================================


struct  BFu17i_Us_L  {
  unsigned int v1:17;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Us_L) C1{ Fi:17 Fs FL}



static void Test_BFu17i_Us_L()
{
  {
    init_simple_test("BFu17i_Us_L");
    static STRUCT_IF_C BFu17i_Us_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_L");
    check_field_offset(lv, v2, 4, "BFu17i_Us_L.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_L, BFu17i_Us_L)
//============================================================================


struct  BFu17i_Us_S  {
  unsigned int v1:17;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu17i_Us_S) C1{ Fi:17 Fs[2]}



static void Test_BFu17i_Us_S()
{
  {
    init_simple_test("BFu17i_Us_S");
    static STRUCT_IF_C BFu17i_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_S");
    check_field_offset(lv, v2, 4, "BFu17i_Us_S.v2");
    check_field_offset(lv, v3, 6, "BFu17i_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_S, BFu17i_Us_S)
//============================================================================


struct  BFu17i_Us_Uc  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Us_Uc) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_Us_Uc()
{
  {
    init_simple_test("BFu17i_Us_Uc");
    static STRUCT_IF_C BFu17i_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Uc");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Uc.v2");
    check_field_offset(lv, v3, 6, "BFu17i_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Uc, BFu17i_Us_Uc)
//============================================================================


struct  BFu17i_Us_Ui  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Us_Ui) C1{ Fi:17 Fs Fi}



static void Test_BFu17i_Us_Ui()
{
  {
    init_simple_test("BFu17i_Us_Ui");
    static STRUCT_IF_C BFu17i_Us_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Ui");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Ui, BFu17i_Us_Ui)
//============================================================================


struct  BFu17i_Us_Ul  {
  unsigned int v1:17;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Us_Ul) C1{ Fi:17 Fs FL}



static void Test_BFu17i_Us_Ul()
{
  {
    init_simple_test("BFu17i_Us_Ul");
    static STRUCT_IF_C BFu17i_Us_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17i_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Ul");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Ul, BFu17i_Us_Ul)
//============================================================================


struct  BFu17i_Us_Us  {
  unsigned int v1:17;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Us_Us) C1{ Fi:17 Fs[2]}



static void Test_BFu17i_Us_Us()
{
  {
    init_simple_test("BFu17i_Us_Us");
    static STRUCT_IF_C BFu17i_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Us");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Us.v2");
    check_field_offset(lv, v3, 6, "BFu17i_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Us, BFu17i_Us_Us)
//============================================================================


struct  BFu17i_Us_Vp  {
  unsigned int v1:17;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu17i_Us_Vp) C1{ Fi:17 Fs Fp}



static void Test_BFu17i_Us_Vp()
{
  {
    init_simple_test("BFu17i_Us_Vp");
    static STRUCT_IF_C BFu17i_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_Vp");
    check_field_offset(lv, v2, 4, "BFu17i_Us_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Us_Vp, BFu17i_Us_Vp)
//============================================================================


struct  BFu17i_Vp  {
  unsigned int v1:17;
  void *v2;
};
//SIG(1 BFu17i_Vp) C1{ Fi:17 Fp}



static void Test_BFu17i_Vp()
{
  {
    init_simple_test("BFu17i_Vp");
    static STRUCT_IF_C BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp, BFu17i_Vp)
//============================================================================


struct  BFu17i_Vp_BFu15i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_Vp_BFu15i) C1{ Fi:17 Fp Fi:15}



static void Test_BFu17i_Vp_BFu15i()
{
  {
    init_simple_test("BFu17i_Vp_BFu15i");
    static STRUCT_IF_C BFu17i_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu15i, BFu17i_Vp_BFu15i)
//============================================================================


struct  BFu17i_Vp_BFu15ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_Vp_BFu15ll) C1{ Fi:17 Fp FL:15}



static void Test_BFu17i_Vp_BFu15ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu15ll");
    static STRUCT_IF_C BFu17i_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu15ll, BFu17i_Vp_BFu15ll)
//============================================================================


struct  BFu17i_Vp_BFu15s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_Vp_BFu15s) C1{ Fi:17 Fp Fs:15}



static void Test_BFu17i_Vp_BFu15s()
{
  {
    init_simple_test("BFu17i_Vp_BFu15s");
    static STRUCT_IF_C BFu17i_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu17i_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu17i_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu15s, BFu17i_Vp_BFu15s)
//============================================================================


struct  BFu17i_Vp_BFu16i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_Vp_BFu16i) C1{ Fi:17 Fp Fi:16}



static void Test_BFu17i_Vp_BFu16i()
{
  {
    init_simple_test("BFu17i_Vp_BFu16i");
    static STRUCT_IF_C BFu17i_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu16i, BFu17i_Vp_BFu16i)
//============================================================================


struct  BFu17i_Vp_BFu16ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_Vp_BFu16ll) C1{ Fi:17 Fp FL:16}



static void Test_BFu17i_Vp_BFu16ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu16ll");
    static STRUCT_IF_C BFu17i_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu16ll, BFu17i_Vp_BFu16ll)
//============================================================================


struct  BFu17i_Vp_BFu16s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_Vp_BFu16s) C1{ Fi:17 Fp Fs:16}



static void Test_BFu17i_Vp_BFu16s()
{
  {
    init_simple_test("BFu17i_Vp_BFu16s");
    static STRUCT_IF_C BFu17i_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu17i_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu17i_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu16s, BFu17i_Vp_BFu16s)
//============================================================================


struct  BFu17i_Vp_BFu17i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_Vp_BFu17i) C1{ Fi:17 Fp Fi:17}



static void Test_BFu17i_Vp_BFu17i()
{
  {
    init_simple_test("BFu17i_Vp_BFu17i");
    static STRUCT_IF_C BFu17i_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu17i_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu17i, BFu17i_Vp_BFu17i)
//============================================================================


struct  BFu17i_Vp_BFu17ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_Vp_BFu17ll) C1{ Fi:17 Fp FL:17}



static void Test_BFu17i_Vp_BFu17ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu17ll");
    static STRUCT_IF_C BFu17i_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu17i_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu17ll, BFu17i_Vp_BFu17ll)
//============================================================================


struct  BFu17i_Vp_BFu1c  {
  unsigned int v1:17;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_Vp_BFu1c) C1{ Fi:17 Fp Fc:1}



static void Test_BFu17i_Vp_BFu1c()
{
  {
    init_simple_test("BFu17i_Vp_BFu1c");
    static STRUCT_IF_C BFu17i_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu1c, BFu17i_Vp_BFu1c)
//============================================================================


struct  BFu17i_Vp_BFu1i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_Vp_BFu1i) C1{ Fi:17 Fp Fi:1}



static void Test_BFu17i_Vp_BFu1i()
{
  {
    init_simple_test("BFu17i_Vp_BFu1i");
    static STRUCT_IF_C BFu17i_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu1i, BFu17i_Vp_BFu1i)
//============================================================================


struct  BFu17i_Vp_BFu1ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_Vp_BFu1ll) C1{ Fi:17 Fp FL:1}



static void Test_BFu17i_Vp_BFu1ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu1ll");
    static STRUCT_IF_C BFu17i_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu1ll, BFu17i_Vp_BFu1ll)
//============================================================================


struct  BFu17i_Vp_BFu1s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_Vp_BFu1s) C1{ Fi:17 Fp Fs:1}



static void Test_BFu17i_Vp_BFu1s()
{
  {
    init_simple_test("BFu17i_Vp_BFu1s");
    static STRUCT_IF_C BFu17i_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu17i_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu1s, BFu17i_Vp_BFu1s)
//============================================================================


struct  BFu17i_Vp_BFu31i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_Vp_BFu31i) C1{ Fi:17 Fp Fi:31}



static void Test_BFu17i_Vp_BFu31i()
{
  {
    init_simple_test("BFu17i_Vp_BFu31i");
    static STRUCT_IF_C BFu17i_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu17i_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu17i_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu31i, BFu17i_Vp_BFu31i)
//============================================================================


struct  BFu17i_Vp_BFu31ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_Vp_BFu31ll) C1{ Fi:17 Fp FL:31}



static void Test_BFu17i_Vp_BFu31ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu31ll");
    static STRUCT_IF_C BFu17i_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu17i_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu17i_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu31ll, BFu17i_Vp_BFu31ll)
//============================================================================


struct  BFu17i_Vp_BFu32i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_Vp_BFu32i) C1{ Fi:17 Fp Fi:32}



static void Test_BFu17i_Vp_BFu32i()
{
  {
    init_simple_test("BFu17i_Vp_BFu32i");
    static STRUCT_IF_C BFu17i_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu17i_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu17i_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu32i, BFu17i_Vp_BFu32i)
//============================================================================


struct  BFu17i_Vp_BFu32ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_Vp_BFu32ll) C1{ Fi:17 Fp FL:32}



static void Test_BFu17i_Vp_BFu32ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu32ll");
    static STRUCT_IF_C BFu17i_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu17i_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu17i_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu32ll, BFu17i_Vp_BFu32ll)
//============================================================================


struct  BFu17i_Vp_BFu33  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_Vp_BFu33) C1{ Fi:17 Fp FL:33}



static void Test_BFu17i_Vp_BFu33()
{
  {
    init_simple_test("BFu17i_Vp_BFu33");
    static STRUCT_IF_C BFu17i_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu17i_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu17i_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu33, BFu17i_Vp_BFu33)
//============================================================================


struct  BFu17i_Vp_BFu7c  {
  unsigned int v1:17;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_Vp_BFu7c) C1{ Fi:17 Fp Fc:7}



static void Test_BFu17i_Vp_BFu7c()
{
  {
    init_simple_test("BFu17i_Vp_BFu7c");
    static STRUCT_IF_C BFu17i_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu7c, BFu17i_Vp_BFu7c)
//============================================================================


struct  BFu17i_Vp_BFu7i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_Vp_BFu7i) C1{ Fi:17 Fp Fi:7}



static void Test_BFu17i_Vp_BFu7i()
{
  {
    init_simple_test("BFu17i_Vp_BFu7i");
    static STRUCT_IF_C BFu17i_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu7i, BFu17i_Vp_BFu7i)
//============================================================================


struct  BFu17i_Vp_BFu7ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_Vp_BFu7ll) C1{ Fi:17 Fp FL:7}



static void Test_BFu17i_Vp_BFu7ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu7ll");
    static STRUCT_IF_C BFu17i_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu7ll, BFu17i_Vp_BFu7ll)
//============================================================================


struct  BFu17i_Vp_BFu7s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_Vp_BFu7s) C1{ Fi:17 Fp Fs:7}



static void Test_BFu17i_Vp_BFu7s()
{
  {
    init_simple_test("BFu17i_Vp_BFu7s");
    static STRUCT_IF_C BFu17i_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu17i_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu17i_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu7s, BFu17i_Vp_BFu7s)
//============================================================================


struct  BFu17i_Vp_BFu8c  {
  unsigned int v1:17;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_Vp_BFu8c) C1{ Fi:17 Fp Fc:8}



static void Test_BFu17i_Vp_BFu8c()
{
  {
    init_simple_test("BFu17i_Vp_BFu8c");
    static STRUCT_IF_C BFu17i_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu8c, BFu17i_Vp_BFu8c)
//============================================================================


struct  BFu17i_Vp_BFu8i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_Vp_BFu8i) C1{ Fi:17 Fp Fi:8}



static void Test_BFu17i_Vp_BFu8i()
{
  {
    init_simple_test("BFu17i_Vp_BFu8i");
    static STRUCT_IF_C BFu17i_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu8i, BFu17i_Vp_BFu8i)
//============================================================================


struct  BFu17i_Vp_BFu8ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_Vp_BFu8ll) C1{ Fi:17 Fp FL:8}



static void Test_BFu17i_Vp_BFu8ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu8ll");
    static STRUCT_IF_C BFu17i_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu8ll, BFu17i_Vp_BFu8ll)
//============================================================================


struct  BFu17i_Vp_BFu8s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_Vp_BFu8s) C1{ Fi:17 Fp Fs:8}



static void Test_BFu17i_Vp_BFu8s()
{
  {
    init_simple_test("BFu17i_Vp_BFu8s");
    static STRUCT_IF_C BFu17i_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu17i_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu17i_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu8s, BFu17i_Vp_BFu8s)
//============================================================================


struct  BFu17i_Vp_BFu9i  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_Vp_BFu9i) C1{ Fi:17 Fp Fi:9}



static void Test_BFu17i_Vp_BFu9i()
{
  {
    init_simple_test("BFu17i_Vp_BFu9i");
    static STRUCT_IF_C BFu17i_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu9i, BFu17i_Vp_BFu9i)
//============================================================================


struct  BFu17i_Vp_BFu9ll  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_Vp_BFu9ll) C1{ Fi:17 Fp FL:9}



static void Test_BFu17i_Vp_BFu9ll()
{
  {
    init_simple_test("BFu17i_Vp_BFu9ll");
    static STRUCT_IF_C BFu17i_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu9ll, BFu17i_Vp_BFu9ll)
//============================================================================


struct  BFu17i_Vp_BFu9s  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_Vp_BFu9s) C1{ Fi:17 Fp Fs:9}



static void Test_BFu17i_Vp_BFu9s()
{
  {
    init_simple_test("BFu17i_Vp_BFu9s");
    static STRUCT_IF_C BFu17i_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu17i_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu17i_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_BFu9s, BFu17i_Vp_BFu9s)
//============================================================================


struct  BFu17i_Vp_C  {
  unsigned int v1:17;
  void *v2;
  char v3;
};
//SIG(1 BFu17i_Vp_C) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Vp_C()
{
  {
    init_simple_test("BFu17i_Vp_C");
    static STRUCT_IF_C BFu17i_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_C, BFu17i_Vp_C)
//============================================================================


struct  BFu17i_Vp_D  {
  unsigned int v1:17;
  void *v2;
  double v3;
};
//SIG(1 BFu17i_Vp_D) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Vp_D()
{
  {
    init_simple_test("BFu17i_Vp_D");
    static STRUCT_IF_C BFu17i_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_D, BFu17i_Vp_D)
//============================================================================


struct  BFu17i_Vp_F  {
  unsigned int v1:17;
  void *v2;
  float v3;
};
//SIG(1 BFu17i_Vp_F) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Vp_F()
{
  {
    init_simple_test("BFu17i_Vp_F");
    static STRUCT_IF_C BFu17i_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_F, BFu17i_Vp_F)
//============================================================================


struct  BFu17i_Vp_I  {
  unsigned int v1:17;
  void *v2;
  int v3;
};
//SIG(1 BFu17i_Vp_I) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Vp_I()
{
  {
    init_simple_test("BFu17i_Vp_I");
    static STRUCT_IF_C BFu17i_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_I, BFu17i_Vp_I)
//============================================================================


struct  BFu17i_Vp_Ip  {
  unsigned int v1:17;
  void *v2;
  int *v3;
};
//SIG(1 BFu17i_Vp_Ip) C1{ Fi:17 Fp[2]}



static void Test_BFu17i_Vp_Ip()
{
  {
    init_simple_test("BFu17i_Vp_Ip");
    static STRUCT_IF_C BFu17i_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Ip, BFu17i_Vp_Ip)
//============================================================================


struct  BFu17i_Vp_L  {
  unsigned int v1:17;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_Vp_L) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Vp_L()
{
  {
    init_simple_test("BFu17i_Vp_L");
    static STRUCT_IF_C BFu17i_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_L, BFu17i_Vp_L)
//============================================================================


struct  BFu17i_Vp_S  {
  unsigned int v1:17;
  void *v2;
  short v3;
};
//SIG(1 BFu17i_Vp_S) C1{ Fi:17 Fp Fs}



static void Test_BFu17i_Vp_S()
{
  {
    init_simple_test("BFu17i_Vp_S");
    static STRUCT_IF_C BFu17i_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_S, BFu17i_Vp_S)
//============================================================================


struct  BFu17i_Vp_Uc  {
  unsigned int v1:17;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu17i_Vp_Uc) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Vp_Uc()
{
  {
    init_simple_test("BFu17i_Vp_Uc");
    static STRUCT_IF_C BFu17i_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Uc, BFu17i_Vp_Uc)
//============================================================================


struct  BFu17i_Vp_Ui  {
  unsigned int v1:17;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu17i_Vp_Ui) C1{ Fi:17 Fp Fi}



static void Test_BFu17i_Vp_Ui()
{
  {
    init_simple_test("BFu17i_Vp_Ui");
    static STRUCT_IF_C BFu17i_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Ui, BFu17i_Vp_Ui)
//============================================================================


struct  BFu17i_Vp_Ul  {
  unsigned int v1:17;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_Vp_Ul) C1{ Fi:17 Fp FL}



static void Test_BFu17i_Vp_Ul()
{
  {
    init_simple_test("BFu17i_Vp_Ul");
    static STRUCT_IF_C BFu17i_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Ul, BFu17i_Vp_Ul)
//============================================================================


struct  BFu17i_Vp_Us  {
  unsigned int v1:17;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu17i_Vp_Us) C1{ Fi:17 Fp Fs}



static void Test_BFu17i_Vp_Us()
{
  {
    init_simple_test("BFu17i_Vp_Us");
    static STRUCT_IF_C BFu17i_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Us, BFu17i_Vp_Us)
//============================================================================


struct  BFu17i_Vp_Vp  {
  unsigned int v1:17;
  void *v2;
  void *v3;
};
//SIG(1 BFu17i_Vp_Vp) C1{ Fi:17 Fp[2]}



static void Test_BFu17i_Vp_Vp()
{
  {
    init_simple_test("BFu17i_Vp_Vp");
    static STRUCT_IF_C BFu17i_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17i_Vp_Vp, BFu17i_Vp_Vp)
//============================================================================


struct  BFu17ll  {
  __tsu64 v1:17;
};
//SIG(1 BFu17ll) C1{ FL:17}



static void Test_BFu17ll()
{
  {
    init_simple_test("BFu17ll");
    static STRUCT_IF_C BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll, BFu17ll)
//============================================================================


struct  BFu17ll_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
};
//SIG(1 BFu17ll_BFs17i) C1{ FL:17 Fi:17}



static void Test_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i, BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
  signed int v3:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17i) C1{ FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17i, BFu17ll_BFs17i_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17i_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17i_BFs17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17i_BFs17i, BFu17ll_BFs17i_BFs17i_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17i_BFs17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17i_BFs17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFs17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17i_BFs17ll, BFu17ll_BFs17i_BFs17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFs17i_BFu17i  {
  __tsu64 v1:17;
  signed int v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17i_BFu17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17i_BFu17i, BFu17ll_BFs17i_BFs17i_BFu17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17i_BFu17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17i_BFu17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFs17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17i_BFu17ll, BFu17ll_BFs17i_BFs17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFs17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17ll) C1{ FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17ll, BFu17ll_BFs17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFs17ll_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17ll_BFs17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17ll_BFs17i, BFu17ll_BFs17i_BFs17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17ll_BFs17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17ll_BFs17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17i_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17ll_BFs17ll, BFu17ll_BFs17i_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFs17ll_BFu17i  {
  __tsu64 v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17ll_BFu17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17ll_BFu17i, BFu17ll_BFs17i_BFs17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFs17i_BFs17ll_BFu17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFs17ll_BFu17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17i_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFs17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFs17ll_BFu17ll, BFu17ll_BFs17i_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFu17i  {
  __tsu64 v1:17;
  signed int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17i) C1{ FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17i, BFu17ll_BFs17i_BFu17i)
//============================================================================


struct  BFu17ll_BFs17i_BFu17i_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17i_BFs17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17i_BFs17i, BFu17ll_BFs17i_BFu17i_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFu17i_BFs17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17i_BFs17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFs17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17i_BFs17ll, BFu17ll_BFs17i_BFu17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFu17i_BFu17i  {
  __tsu64 v1:17;
  signed int v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17i_BFu17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17i_BFu17i, BFu17ll_BFs17i_BFu17i_BFu17i)
//============================================================================


struct  BFu17ll_BFs17i_BFu17i_BFu17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17i_BFu17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFs17i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFs17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17i_BFu17ll, BFu17ll_BFs17i_BFu17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFu17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17ll) C1{ FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17ll, BFu17ll_BFs17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFu17ll_BFs17i  {
  __tsu64 v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17ll_BFs17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17ll_BFs17i, BFu17ll_BFs17i_BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17i_BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17ll_BFs17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17i_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17ll_BFs17ll, BFu17ll_BFs17i_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17i_BFu17ll_BFu17i  {
  __tsu64 v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17ll_BFu17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17ll_BFu17i, BFu17ll_BFs17i_BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFs17i_BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  signed int v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17i_BFu17ll_BFu17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFs17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17ll_BFs17i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17i_BFu17ll_BFu17ll, BFu17ll_BFs17i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
};
//SIG(1 BFu17ll_BFs17ll) C1{ FL:17 FL:17}



static void Test_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll, BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17i) C1{ FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17i, BFu17ll_BFs17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17i_BFs17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17i_BFs17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17i_BFs17i, BFu17ll_BFs17ll_BFs17i_BFs17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17i_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17i_BFs17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17i_BFs17ll, BFu17ll_BFs17ll_BFs17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17i_BFu17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17i_BFu17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17i_BFu17i, BFu17ll_BFs17ll_BFs17i_BFu17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17i_BFu17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17i_BFu17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17i_BFu17ll, BFu17ll_BFs17ll_BFs17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17ll) C1{ FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17ll, BFu17ll_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17ll_BFs17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17ll_BFs17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17ll_BFs17i, BFu17ll_BFs17ll_BFs17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17ll_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17ll_BFs17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17ll_BFs17ll, BFu17ll_BFs17ll_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17ll_BFu17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17ll_BFu17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17ll_BFu17i, BFu17ll_BFs17ll_BFs17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFs17ll_BFu17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFs17ll_BFu17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFs17ll_BFu17ll, BFu17ll_BFs17ll_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17i) C1{ FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17i, BFu17ll_BFs17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17i_BFs17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17i_BFs17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17i_BFs17i, BFu17ll_BFs17ll_BFu17i_BFs17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17i_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17i_BFs17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17i_BFs17ll, BFu17ll_BFs17ll_BFu17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17i_BFu17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17i_BFu17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17i_BFu17i, BFu17ll_BFs17ll_BFu17i_BFu17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17i_BFu17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17i_BFu17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17i_BFu17ll, BFu17ll_BFs17ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17ll) C1{ FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17ll, BFu17ll_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17ll_BFs17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17ll_BFs17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17ll_BFs17i, BFu17ll_BFs17ll_BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17ll_BFs17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17ll_BFs17ll, BFu17ll_BFs17ll_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17ll_BFu17i  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17ll_BFu17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFs17ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17ll_BFu17i, BFu17ll_BFs17ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFs17ll_BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  signed __tsi64 v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFs17ll_BFu17ll_BFu17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFs17ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFs17ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFs17ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFs17ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFs17ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFs17ll_BFu17ll_BFu17ll, BFu17ll_BFs17ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu17ll_BFu15i) C1{ FL:17 Fi:15}



static void Test_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i, BFu17ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu15i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu15i_BFu15i) C1{ FL:17 Fi:15 Fi:15}



static void Test_BFu17ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu15i, BFu17ll_BFu15i_BFu15i)
//============================================================================


struct  BFu17ll_BFu15i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu15i_BFu15ll) C1{ FL:17 Fi:15 FL:15}



static void Test_BFu17ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu15ll, BFu17ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu15i_BFu15s) C1{ FL:17 Fi:15 Fs:15}



static void Test_BFu17ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu15s, BFu17ll_BFu15i_BFu15s)
//============================================================================


struct  BFu17ll_BFu15i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu15i_BFu16i) C1{ FL:17 Fi:15 Fi:16}



static void Test_BFu17ll_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu16i, BFu17ll_BFu15i_BFu16i)
//============================================================================


struct  BFu17ll_BFu15i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu15i_BFu16ll) C1{ FL:17 Fi:15 FL:16}



static void Test_BFu17ll_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu16ll, BFu17ll_BFu15i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu15i_BFu16s) C1{ FL:17 Fi:15 Fs:16}



static void Test_BFu17ll_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu16s, BFu17ll_BFu15i_BFu16s)
//============================================================================


struct  BFu17ll_BFu15i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu15i_BFu17i) C1{ FL:17 Fi:15 Fi:17}



static void Test_BFu17ll_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu17i, BFu17ll_BFu15i_BFu17i)
//============================================================================


struct  BFu17ll_BFu15i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu15i_BFu17ll) C1{ FL:17 Fi:15 FL:17}



static void Test_BFu17ll_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu17ll, BFu17ll_BFu15i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu15i_BFu1c) C1{ FL:17 Fi:15 Fc:1}



static void Test_BFu17ll_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu1c, BFu17ll_BFu15i_BFu1c)
//============================================================================


struct  BFu17ll_BFu15i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu15i_BFu1i) C1{ FL:17 Fi:15 Fi:1}



static void Test_BFu17ll_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu1i, BFu17ll_BFu15i_BFu1i)
//============================================================================


struct  BFu17ll_BFu15i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu15i_BFu1ll) C1{ FL:17 Fi:15 FL:1}



static void Test_BFu17ll_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu1ll, BFu17ll_BFu15i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu15i_BFu1s) C1{ FL:17 Fi:15 Fs:1}



static void Test_BFu17ll_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu1s, BFu17ll_BFu15i_BFu1s)
//============================================================================


struct  BFu17ll_BFu15i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu15i_BFu31i) C1{ FL:17 Fi:15 Fi:31}



static void Test_BFu17ll_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu31i, BFu17ll_BFu15i_BFu31i)
//============================================================================


struct  BFu17ll_BFu15i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu15i_BFu31ll) C1{ FL:17 Fi:15 FL:31}



static void Test_BFu17ll_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu31ll, BFu17ll_BFu15i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu15i_BFu32i) C1{ FL:17 Fi:15 Fi:32}



static void Test_BFu17ll_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu32i, BFu17ll_BFu15i_BFu32i)
//============================================================================


struct  BFu17ll_BFu15i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu15i_BFu32ll) C1{ FL:17 Fi:15 FL:32}



static void Test_BFu17ll_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu32ll, BFu17ll_BFu15i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu15i_BFu33) C1{ FL:17 Fi:15 FL:33}



static void Test_BFu17ll_BFu15i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu33, BFu17ll_BFu15i_BFu33)
//============================================================================


struct  BFu17ll_BFu15i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu15i_BFu7c) C1{ FL:17 Fi:15 Fc:7}



static void Test_BFu17ll_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu7c, BFu17ll_BFu15i_BFu7c)
//============================================================================


struct  BFu17ll_BFu15i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu15i_BFu7i) C1{ FL:17 Fi:15 Fi:7}



static void Test_BFu17ll_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu7i, BFu17ll_BFu15i_BFu7i)
//============================================================================


struct  BFu17ll_BFu15i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu15i_BFu7ll) C1{ FL:17 Fi:15 FL:7}



static void Test_BFu17ll_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu7ll, BFu17ll_BFu15i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu15i_BFu7s) C1{ FL:17 Fi:15 Fs:7}



static void Test_BFu17ll_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu7s, BFu17ll_BFu15i_BFu7s)
//============================================================================


struct  BFu17ll_BFu15i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu15i_BFu8c) C1{ FL:17 Fi:15 Fc:8}



static void Test_BFu17ll_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu8c, BFu17ll_BFu15i_BFu8c)
//============================================================================


struct  BFu17ll_BFu15i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu15i_BFu8i) C1{ FL:17 Fi:15 Fi:8}



static void Test_BFu17ll_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu8i, BFu17ll_BFu15i_BFu8i)
//============================================================================


struct  BFu17ll_BFu15i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu15i_BFu8ll) C1{ FL:17 Fi:15 FL:8}



static void Test_BFu17ll_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu8ll, BFu17ll_BFu15i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu15i_BFu8s) C1{ FL:17 Fi:15 Fs:8}



static void Test_BFu17ll_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu8s, BFu17ll_BFu15i_BFu8s)
//============================================================================


struct  BFu17ll_BFu15i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu15i_BFu9i) C1{ FL:17 Fi:15 Fi:9}



static void Test_BFu17ll_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu9i, BFu17ll_BFu15i_BFu9i)
//============================================================================


struct  BFu17ll_BFu15i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu15i_BFu9ll) C1{ FL:17 Fi:15 FL:9}



static void Test_BFu17ll_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu9ll, BFu17ll_BFu15i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu15i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu15i_BFu9s) C1{ FL:17 Fi:15 Fs:9}



static void Test_BFu17ll_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu15i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_BFu9s, BFu17ll_BFu15i_BFu9s)
//============================================================================


struct  BFu17ll_BFu15i_C  {
  __tsu64 v1:17;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu17ll_BFu15i_C) C1{ FL:17 Fi:15 Fc}



static void Test_BFu17ll_BFu15i_C()
{
  {
    init_simple_test("BFu17ll_BFu15i_C");
    static STRUCT_IF_C BFu17ll_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_C, BFu17ll_BFu15i_C)
//============================================================================


struct  BFu17ll_BFu15i_D  {
  __tsu64 v1:17;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu17ll_BFu15i_D) C1{ FL:17 Fi:15 FL}



static void Test_BFu17ll_BFu15i_D()
{
  {
    init_simple_test("BFu17ll_BFu15i_D");
    static STRUCT_IF_C BFu17ll_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_D, BFu17ll_BFu15i_D)
//============================================================================


struct  BFu17ll_BFu15i_F  {
  __tsu64 v1:17;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu17ll_BFu15i_F) C1{ FL:17 Fi:15 Fi}



static void Test_BFu17ll_BFu15i_F()
{
  {
    init_simple_test("BFu17ll_BFu15i_F");
    static STRUCT_IF_C BFu17ll_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_F, BFu17ll_BFu15i_F)
//============================================================================


struct  BFu17ll_BFu15i_I  {
  __tsu64 v1:17;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu17ll_BFu15i_I) C1{ FL:17 Fi:15 Fi}



static void Test_BFu17ll_BFu15i_I()
{
  {
    init_simple_test("BFu17ll_BFu15i_I");
    static STRUCT_IF_C BFu17ll_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_I, BFu17ll_BFu15i_I)
//============================================================================


struct  BFu17ll_BFu15i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu17ll_BFu15i_Ip) C1{ FL:17 Fi:15 Fp}



static void Test_BFu17ll_BFu15i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu15i_Ip");
    static STRUCT_IF_C BFu17ll_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Ip, BFu17ll_BFu15i_Ip)
//============================================================================


struct  BFu17ll_BFu15i_L  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu15i_L) C1{ FL:17 Fi:15 FL}



static void Test_BFu17ll_BFu15i_L()
{
  {
    init_simple_test("BFu17ll_BFu15i_L");
    static STRUCT_IF_C BFu17ll_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_L, BFu17ll_BFu15i_L)
//============================================================================


struct  BFu17ll_BFu15i_S  {
  __tsu64 v1:17;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu17ll_BFu15i_S) C1{ FL:17 Fi:15 Fs}



static void Test_BFu17ll_BFu15i_S()
{
  {
    init_simple_test("BFu17ll_BFu15i_S");
    static STRUCT_IF_C BFu17ll_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_S, BFu17ll_BFu15i_S)
//============================================================================


struct  BFu17ll_BFu15i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu15i_Uc) C1{ FL:17 Fi:15 Fc}



static void Test_BFu17ll_BFu15i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu15i_Uc");
    static STRUCT_IF_C BFu17ll_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Uc, BFu17ll_BFu15i_Uc)
//============================================================================


struct  BFu17ll_BFu15i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu15i_Ui) C1{ FL:17 Fi:15 Fi}



static void Test_BFu17ll_BFu15i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu15i_Ui");
    static STRUCT_IF_C BFu17ll_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Ui, BFu17ll_BFu15i_Ui)
//============================================================================


struct  BFu17ll_BFu15i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu15i_Ul) C1{ FL:17 Fi:15 FL}



static void Test_BFu17ll_BFu15i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu15i_Ul");
    static STRUCT_IF_C BFu17ll_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Ul, BFu17ll_BFu15i_Ul)
//============================================================================


struct  BFu17ll_BFu15i_Us  {
  __tsu64 v1:17;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu15i_Us) C1{ FL:17 Fi:15 Fs}



static void Test_BFu17ll_BFu15i_Us()
{
  {
    init_simple_test("BFu17ll_BFu15i_Us");
    static STRUCT_IF_C BFu17ll_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Us, BFu17ll_BFu15i_Us)
//============================================================================


struct  BFu17ll_BFu15i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu17ll_BFu15i_Vp) C1{ FL:17 Fi:15 Fp}



static void Test_BFu17ll_BFu15i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu15i_Vp");
    static STRUCT_IF_C BFu17ll_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15i_Vp, BFu17ll_BFu15i_Vp)
//============================================================================


struct  BFu17ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu17ll_BFu15ll) C1{ FL:17 FL:15}



static void Test_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll, BFu17ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu15ll_BFu15i) C1{ FL:17 FL:15 Fi:15}



static void Test_BFu17ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu15i, BFu17ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu15ll_BFu15ll) C1{ FL:17 FL:15 FL:15}



static void Test_BFu17ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu15ll, BFu17ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu15ll_BFu15s) C1{ FL:17 FL:15 Fs:15}



static void Test_BFu17ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu15s, BFu17ll_BFu15ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu15ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu15ll_BFu16i) C1{ FL:17 FL:15 Fi:16}



static void Test_BFu17ll_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu16i, BFu17ll_BFu15ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu15ll_BFu16ll) C1{ FL:17 FL:15 FL:16}



static void Test_BFu17ll_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu16ll, BFu17ll_BFu15ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu15ll_BFu16s) C1{ FL:17 FL:15 Fs:16}



static void Test_BFu17ll_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu16s, BFu17ll_BFu15ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu15ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu15ll_BFu17i) C1{ FL:17 FL:15 Fi:17}



static void Test_BFu17ll_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu17i, BFu17ll_BFu15ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu15ll_BFu17ll) C1{ FL:17 FL:15 FL:17}



static void Test_BFu17ll_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu17ll, BFu17ll_BFu15ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu15ll_BFu1c) C1{ FL:17 FL:15 Fc:1}



static void Test_BFu17ll_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu1c, BFu17ll_BFu15ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu15ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu15ll_BFu1i) C1{ FL:17 FL:15 Fi:1}



static void Test_BFu17ll_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu1i, BFu17ll_BFu15ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu15ll_BFu1ll) C1{ FL:17 FL:15 FL:1}



static void Test_BFu17ll_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu1ll, BFu17ll_BFu15ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu15ll_BFu1s) C1{ FL:17 FL:15 Fs:1}



static void Test_BFu17ll_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu1s, BFu17ll_BFu15ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu15ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu15ll_BFu31i) C1{ FL:17 FL:15 Fi:31}



static void Test_BFu17ll_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu31i, BFu17ll_BFu15ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu15ll_BFu31ll) C1{ FL:17 FL:15 FL:31}



static void Test_BFu17ll_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu31ll, BFu17ll_BFu15ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu15ll_BFu32i) C1{ FL:17 FL:15 Fi:32}



static void Test_BFu17ll_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu32i, BFu17ll_BFu15ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu15ll_BFu32ll) C1{ FL:17 FL:15 FL:32}



static void Test_BFu17ll_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu32ll, BFu17ll_BFu15ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu15ll_BFu33) C1{ FL:17 FL:15 FL:33}



static void Test_BFu17ll_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu33, BFu17ll_BFu15ll_BFu33)
//============================================================================


struct  BFu17ll_BFu15ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu15ll_BFu7c) C1{ FL:17 FL:15 Fc:7}



static void Test_BFu17ll_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu7c, BFu17ll_BFu15ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu15ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu15ll_BFu7i) C1{ FL:17 FL:15 Fi:7}



static void Test_BFu17ll_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu7i, BFu17ll_BFu15ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu15ll_BFu7ll) C1{ FL:17 FL:15 FL:7}



static void Test_BFu17ll_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu7ll, BFu17ll_BFu15ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu15ll_BFu7s) C1{ FL:17 FL:15 Fs:7}



static void Test_BFu17ll_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu7s, BFu17ll_BFu15ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu15ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu15ll_BFu8c) C1{ FL:17 FL:15 Fc:8}



static void Test_BFu17ll_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu8c, BFu17ll_BFu15ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu15ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu15ll_BFu8i) C1{ FL:17 FL:15 Fi:8}



static void Test_BFu17ll_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu8i, BFu17ll_BFu15ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu15ll_BFu8ll) C1{ FL:17 FL:15 FL:8}



static void Test_BFu17ll_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu8ll, BFu17ll_BFu15ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu15ll_BFu8s) C1{ FL:17 FL:15 Fs:8}



static void Test_BFu17ll_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu8s, BFu17ll_BFu15ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu15ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu15ll_BFu9i) C1{ FL:17 FL:15 Fi:9}



static void Test_BFu17ll_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu9i, BFu17ll_BFu15ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu15ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu15ll_BFu9ll) C1{ FL:17 FL:15 FL:9}



static void Test_BFu17ll_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu9ll, BFu17ll_BFu15ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu15ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu15ll_BFu9s) C1{ FL:17 FL:15 Fs:9}



static void Test_BFu17ll_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_BFu9s, BFu17ll_BFu15ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu15ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu17ll_BFu15ll_C) C1{ FL:17 FL:15 Fc}



static void Test_BFu17ll_BFu15ll_C()
{
  {
    init_simple_test("BFu17ll_BFu15ll_C");
    static STRUCT_IF_C BFu17ll_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_C, BFu17ll_BFu15ll_C)
//============================================================================


struct  BFu17ll_BFu15ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu17ll_BFu15ll_D) C1{ FL:17 FL:15 FL}



static void Test_BFu17ll_BFu15ll_D()
{
  {
    init_simple_test("BFu17ll_BFu15ll_D");
    static STRUCT_IF_C BFu17ll_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_D, BFu17ll_BFu15ll_D)
//============================================================================


struct  BFu17ll_BFu15ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu17ll_BFu15ll_F) C1{ FL:17 FL:15 Fi}



static void Test_BFu17ll_BFu15ll_F()
{
  {
    init_simple_test("BFu17ll_BFu15ll_F");
    static STRUCT_IF_C BFu17ll_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_F, BFu17ll_BFu15ll_F)
//============================================================================


struct  BFu17ll_BFu15ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu17ll_BFu15ll_I) C1{ FL:17 FL:15 Fi}



static void Test_BFu17ll_BFu15ll_I()
{
  {
    init_simple_test("BFu17ll_BFu15ll_I");
    static STRUCT_IF_C BFu17ll_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_I, BFu17ll_BFu15ll_I)
//============================================================================


struct  BFu17ll_BFu15ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu17ll_BFu15ll_Ip) C1{ FL:17 FL:15 Fp}



static void Test_BFu17ll_BFu15ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Ip, BFu17ll_BFu15ll_Ip)
//============================================================================


struct  BFu17ll_BFu15ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu15ll_L) C1{ FL:17 FL:15 FL}



static void Test_BFu17ll_BFu15ll_L()
{
  {
    init_simple_test("BFu17ll_BFu15ll_L");
    static STRUCT_IF_C BFu17ll_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_L, BFu17ll_BFu15ll_L)
//============================================================================


struct  BFu17ll_BFu15ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu17ll_BFu15ll_S) C1{ FL:17 FL:15 Fs}



static void Test_BFu17ll_BFu15ll_S()
{
  {
    init_simple_test("BFu17ll_BFu15ll_S");
    static STRUCT_IF_C BFu17ll_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_S, BFu17ll_BFu15ll_S)
//============================================================================


struct  BFu17ll_BFu15ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu15ll_Uc) C1{ FL:17 FL:15 Fc}



static void Test_BFu17ll_BFu15ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Uc, BFu17ll_BFu15ll_Uc)
//============================================================================


struct  BFu17ll_BFu15ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu15ll_Ui) C1{ FL:17 FL:15 Fi}



static void Test_BFu17ll_BFu15ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Ui, BFu17ll_BFu15ll_Ui)
//============================================================================


struct  BFu17ll_BFu15ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu15ll_Ul) C1{ FL:17 FL:15 FL}



static void Test_BFu17ll_BFu15ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Ul, BFu17ll_BFu15ll_Ul)
//============================================================================


struct  BFu17ll_BFu15ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu15ll_Us) C1{ FL:17 FL:15 Fs}



static void Test_BFu17ll_BFu15ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Us");
    static STRUCT_IF_C BFu17ll_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Us, BFu17ll_BFu15ll_Us)
//============================================================================


struct  BFu17ll_BFu15ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu17ll_BFu15ll_Vp) C1{ FL:17 FL:15 Fp}



static void Test_BFu17ll_BFu15ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu15ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15ll_Vp, BFu17ll_BFu15ll_Vp)
//============================================================================


struct  BFu17ll_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu17ll_BFu15s) C1{ FL:17 Fs:15}



static void Test_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s, BFu17ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu15s_BFu15i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu15s_BFu15i) C1{ FL:17 Fs:15 Fi:15}



static void Test_BFu17ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu15i, BFu17ll_BFu15s_BFu15i)
//============================================================================


struct  BFu17ll_BFu15s_BFu15ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu15s_BFu15ll) C1{ FL:17 Fs:15 FL:15}



static void Test_BFu17ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu15ll, BFu17ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu15s_BFu15s) C1{ FL:17 Fs:15 Fs:15}



static void Test_BFu17ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu15s, BFu17ll_BFu15s_BFu15s)
//============================================================================


struct  BFu17ll_BFu15s_BFu16i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu15s_BFu16i) C1{ FL:17 Fs:15 Fi:16}



static void Test_BFu17ll_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu16i, BFu17ll_BFu15s_BFu16i)
//============================================================================


struct  BFu17ll_BFu15s_BFu16ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu15s_BFu16ll) C1{ FL:17 Fs:15 FL:16}



static void Test_BFu17ll_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu16ll, BFu17ll_BFu15s_BFu16ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu15s_BFu16s) C1{ FL:17 Fs:15 Fs:16}



static void Test_BFu17ll_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu16s, BFu17ll_BFu15s_BFu16s)
//============================================================================


struct  BFu17ll_BFu15s_BFu17i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu15s_BFu17i) C1{ FL:17 Fs:15 Fi:17}



static void Test_BFu17ll_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu17i, BFu17ll_BFu15s_BFu17i)
//============================================================================


struct  BFu17ll_BFu15s_BFu17ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu15s_BFu17ll) C1{ FL:17 Fs:15 FL:17}



static void Test_BFu17ll_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu17ll, BFu17ll_BFu15s_BFu17ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu1c  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu15s_BFu1c) C1{ FL:17 Fs:15 Fc:1}



static void Test_BFu17ll_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu1c, BFu17ll_BFu15s_BFu1c)
//============================================================================


struct  BFu17ll_BFu15s_BFu1i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu15s_BFu1i) C1{ FL:17 Fs:15 Fi:1}



static void Test_BFu17ll_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu1i, BFu17ll_BFu15s_BFu1i)
//============================================================================


struct  BFu17ll_BFu15s_BFu1ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu15s_BFu1ll) C1{ FL:17 Fs:15 FL:1}



static void Test_BFu17ll_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu1ll, BFu17ll_BFu15s_BFu1ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu15s_BFu1s) C1{ FL:17 Fs:15 Fs:1}



static void Test_BFu17ll_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu1s, BFu17ll_BFu15s_BFu1s)
//============================================================================


struct  BFu17ll_BFu15s_BFu31i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu15s_BFu31i) C1{ FL:17 Fs:15 Fi:31}



static void Test_BFu17ll_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu31i, BFu17ll_BFu15s_BFu31i)
//============================================================================


struct  BFu17ll_BFu15s_BFu31ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu15s_BFu31ll) C1{ FL:17 Fs:15 FL:31}



static void Test_BFu17ll_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu31ll, BFu17ll_BFu15s_BFu31ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu32i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu15s_BFu32i) C1{ FL:17 Fs:15 Fi:32}



static void Test_BFu17ll_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu32i, BFu17ll_BFu15s_BFu32i)
//============================================================================


struct  BFu17ll_BFu15s_BFu32ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu15s_BFu32ll) C1{ FL:17 Fs:15 FL:32}



static void Test_BFu17ll_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu32ll, BFu17ll_BFu15s_BFu32ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu33  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu15s_BFu33) C1{ FL:17 Fs:15 FL:33}



static void Test_BFu17ll_BFu15s_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu33");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu33, BFu17ll_BFu15s_BFu33)
//============================================================================


struct  BFu17ll_BFu15s_BFu7c  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu15s_BFu7c) C1{ FL:17 Fs:15 Fc:7}



static void Test_BFu17ll_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu7c, BFu17ll_BFu15s_BFu7c)
//============================================================================


struct  BFu17ll_BFu15s_BFu7i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu15s_BFu7i) C1{ FL:17 Fs:15 Fi:7}



static void Test_BFu17ll_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu7i, BFu17ll_BFu15s_BFu7i)
//============================================================================


struct  BFu17ll_BFu15s_BFu7ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu15s_BFu7ll) C1{ FL:17 Fs:15 FL:7}



static void Test_BFu17ll_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu7ll, BFu17ll_BFu15s_BFu7ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu7s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu15s_BFu7s) C1{ FL:17 Fs:15 Fs:7}



static void Test_BFu17ll_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu7s, BFu17ll_BFu15s_BFu7s)
//============================================================================


struct  BFu17ll_BFu15s_BFu8c  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu15s_BFu8c) C1{ FL:17 Fs:15 Fc:8}



static void Test_BFu17ll_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu8c, BFu17ll_BFu15s_BFu8c)
//============================================================================


struct  BFu17ll_BFu15s_BFu8i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu15s_BFu8i) C1{ FL:17 Fs:15 Fi:8}



static void Test_BFu17ll_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu8i, BFu17ll_BFu15s_BFu8i)
//============================================================================


struct  BFu17ll_BFu15s_BFu8ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu15s_BFu8ll) C1{ FL:17 Fs:15 FL:8}



static void Test_BFu17ll_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu8ll, BFu17ll_BFu15s_BFu8ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu8s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu15s_BFu8s) C1{ FL:17 Fs:15 Fs:8}



static void Test_BFu17ll_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu8s, BFu17ll_BFu15s_BFu8s)
//============================================================================


struct  BFu17ll_BFu15s_BFu9i  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu15s_BFu9i) C1{ FL:17 Fs:15 Fi:9}



static void Test_BFu17ll_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu9i, BFu17ll_BFu15s_BFu9i)
//============================================================================


struct  BFu17ll_BFu15s_BFu9ll  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu15s_BFu9ll) C1{ FL:17 Fs:15 FL:9}



static void Test_BFu17ll_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu9ll, BFu17ll_BFu15s_BFu9ll)
//============================================================================


struct  BFu17ll_BFu15s_BFu9s  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu15s_BFu9s) C1{ FL:17 Fs:15 Fs:9}



static void Test_BFu17ll_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu15s_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_BFu9s, BFu17ll_BFu15s_BFu9s)
//============================================================================


struct  BFu17ll_BFu15s_C  {
  __tsu64 v1:17;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu17ll_BFu15s_C) C1{ FL:17 Fs:15 Fc}



static void Test_BFu17ll_BFu15s_C()
{
  {
    init_simple_test("BFu17ll_BFu15s_C");
    static STRUCT_IF_C BFu17ll_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_C, BFu17ll_BFu15s_C)
//============================================================================


struct  BFu17ll_BFu15s_D  {
  __tsu64 v1:17;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu17ll_BFu15s_D) C1{ FL:17 Fs:15 FL}



static void Test_BFu17ll_BFu15s_D()
{
  {
    init_simple_test("BFu17ll_BFu15s_D");
    static STRUCT_IF_C BFu17ll_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_D, BFu17ll_BFu15s_D)
//============================================================================


struct  BFu17ll_BFu15s_F  {
  __tsu64 v1:17;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu17ll_BFu15s_F) C1{ FL:17 Fs:15 Fi}



static void Test_BFu17ll_BFu15s_F()
{
  {
    init_simple_test("BFu17ll_BFu15s_F");
    static STRUCT_IF_C BFu17ll_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_F, BFu17ll_BFu15s_F)
//============================================================================


struct  BFu17ll_BFu15s_I  {
  __tsu64 v1:17;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu17ll_BFu15s_I) C1{ FL:17 Fs:15 Fi}



static void Test_BFu17ll_BFu15s_I()
{
  {
    init_simple_test("BFu17ll_BFu15s_I");
    static STRUCT_IF_C BFu17ll_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_I, BFu17ll_BFu15s_I)
//============================================================================


struct  BFu17ll_BFu15s_Ip  {
  __tsu64 v1:17;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu17ll_BFu15s_Ip) C1{ FL:17 Fs:15 Fp}



static void Test_BFu17ll_BFu15s_Ip()
{
  {
    init_simple_test("BFu17ll_BFu15s_Ip");
    static STRUCT_IF_C BFu17ll_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Ip, BFu17ll_BFu15s_Ip)
//============================================================================


struct  BFu17ll_BFu15s_L  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu15s_L) C1{ FL:17 Fs:15 FL}



static void Test_BFu17ll_BFu15s_L()
{
  {
    init_simple_test("BFu17ll_BFu15s_L");
    static STRUCT_IF_C BFu17ll_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_L, BFu17ll_BFu15s_L)
//============================================================================


struct  BFu17ll_BFu15s_S  {
  __tsu64 v1:17;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu17ll_BFu15s_S) C1{ FL:17 Fs:15 Fs}



static void Test_BFu17ll_BFu15s_S()
{
  {
    init_simple_test("BFu17ll_BFu15s_S");
    static STRUCT_IF_C BFu17ll_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_S, BFu17ll_BFu15s_S)
//============================================================================


struct  BFu17ll_BFu15s_Uc  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu15s_Uc) C1{ FL:17 Fs:15 Fc}



static void Test_BFu17ll_BFu15s_Uc()
{
  {
    init_simple_test("BFu17ll_BFu15s_Uc");
    static STRUCT_IF_C BFu17ll_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Uc, BFu17ll_BFu15s_Uc)
//============================================================================


struct  BFu17ll_BFu15s_Ui  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu15s_Ui) C1{ FL:17 Fs:15 Fi}



static void Test_BFu17ll_BFu15s_Ui()
{
  {
    init_simple_test("BFu17ll_BFu15s_Ui");
    static STRUCT_IF_C BFu17ll_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Ui, BFu17ll_BFu15s_Ui)
//============================================================================


struct  BFu17ll_BFu15s_Ul  {
  __tsu64 v1:17;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu15s_Ul) C1{ FL:17 Fs:15 FL}



static void Test_BFu17ll_BFu15s_Ul()
{
  {
    init_simple_test("BFu17ll_BFu15s_Ul");
    static STRUCT_IF_C BFu17ll_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Ul, BFu17ll_BFu15s_Ul)
//============================================================================


struct  BFu17ll_BFu15s_Us  {
  __tsu64 v1:17;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu15s_Us) C1{ FL:17 Fs:15 Fs}



static void Test_BFu17ll_BFu15s_Us()
{
  {
    init_simple_test("BFu17ll_BFu15s_Us");
    static STRUCT_IF_C BFu17ll_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Us, BFu17ll_BFu15s_Us)
//============================================================================


struct  BFu17ll_BFu15s_Vp  {
  __tsu64 v1:17;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu17ll_BFu15s_Vp) C1{ FL:17 Fs:15 Fp}



static void Test_BFu17ll_BFu15s_Vp()
{
  {
    init_simple_test("BFu17ll_BFu15s_Vp");
    static STRUCT_IF_C BFu17ll_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu15s_Vp, BFu17ll_BFu15s_Vp)
//============================================================================


struct  BFu17ll_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu17ll_BFu16i) C1{ FL:17 Fi:16}



static void Test_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i, BFu17ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu16i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu16i_BFu15i) C1{ FL:17 Fi:16 Fi:15}



static void Test_BFu17ll_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu15i, BFu17ll_BFu16i_BFu15i)
//============================================================================


struct  BFu17ll_BFu16i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu16i_BFu15ll) C1{ FL:17 Fi:16 FL:15}



static void Test_BFu17ll_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu15ll, BFu17ll_BFu16i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu16i_BFu15s) C1{ FL:17 Fi:16 Fs:15}



static void Test_BFu17ll_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu15s, BFu17ll_BFu16i_BFu15s)
//============================================================================


struct  BFu17ll_BFu16i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu16i_BFu16i) C1{ FL:17 Fi:16 Fi:16}



static void Test_BFu17ll_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu16i, BFu17ll_BFu16i_BFu16i)
//============================================================================


struct  BFu17ll_BFu16i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu16i_BFu16ll) C1{ FL:17 Fi:16 FL:16}



static void Test_BFu17ll_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu16ll, BFu17ll_BFu16i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu16i_BFu16s) C1{ FL:17 Fi:16 Fs:16}



static void Test_BFu17ll_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu16s, BFu17ll_BFu16i_BFu16s)
//============================================================================


struct  BFu17ll_BFu16i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu16i_BFu17i) C1{ FL:17 Fi:16 Fi:17}



static void Test_BFu17ll_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu17i, BFu17ll_BFu16i_BFu17i)
//============================================================================


struct  BFu17ll_BFu16i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu16i_BFu17ll) C1{ FL:17 Fi:16 FL:17}



static void Test_BFu17ll_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu17ll, BFu17ll_BFu16i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu16i_BFu1c) C1{ FL:17 Fi:16 Fc:1}



static void Test_BFu17ll_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu1c, BFu17ll_BFu16i_BFu1c)
//============================================================================


struct  BFu17ll_BFu16i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu16i_BFu1i) C1{ FL:17 Fi:16 Fi:1}



static void Test_BFu17ll_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu1i, BFu17ll_BFu16i_BFu1i)
//============================================================================


struct  BFu17ll_BFu16i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu16i_BFu1ll) C1{ FL:17 Fi:16 FL:1}



static void Test_BFu17ll_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu1ll, BFu17ll_BFu16i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu16i_BFu1s) C1{ FL:17 Fi:16 Fs:1}



static void Test_BFu17ll_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu1s, BFu17ll_BFu16i_BFu1s)
//============================================================================


struct  BFu17ll_BFu16i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu16i_BFu31i) C1{ FL:17 Fi:16 Fi:31}



static void Test_BFu17ll_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu31i, BFu17ll_BFu16i_BFu31i)
//============================================================================


struct  BFu17ll_BFu16i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu16i_BFu31ll) C1{ FL:17 Fi:16 FL:31}



static void Test_BFu17ll_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu31ll, BFu17ll_BFu16i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu16i_BFu32i) C1{ FL:17 Fi:16 Fi:32}



static void Test_BFu17ll_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu32i, BFu17ll_BFu16i_BFu32i)
//============================================================================


struct  BFu17ll_BFu16i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu16i_BFu32ll) C1{ FL:17 Fi:16 FL:32}



static void Test_BFu17ll_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu32ll, BFu17ll_BFu16i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu16i_BFu33) C1{ FL:17 Fi:16 FL:33}



static void Test_BFu17ll_BFu16i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu33, BFu17ll_BFu16i_BFu33)
//============================================================================


struct  BFu17ll_BFu16i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu16i_BFu7c) C1{ FL:17 Fi:16 Fc:7}



static void Test_BFu17ll_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu7c, BFu17ll_BFu16i_BFu7c)
//============================================================================


struct  BFu17ll_BFu16i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu16i_BFu7i) C1{ FL:17 Fi:16 Fi:7}



static void Test_BFu17ll_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu7i, BFu17ll_BFu16i_BFu7i)
//============================================================================


struct  BFu17ll_BFu16i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu16i_BFu7ll) C1{ FL:17 Fi:16 FL:7}



static void Test_BFu17ll_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu7ll, BFu17ll_BFu16i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu16i_BFu7s) C1{ FL:17 Fi:16 Fs:7}



static void Test_BFu17ll_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu7s, BFu17ll_BFu16i_BFu7s)
//============================================================================


struct  BFu17ll_BFu16i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu16i_BFu8c) C1{ FL:17 Fi:16 Fc:8}



static void Test_BFu17ll_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu8c, BFu17ll_BFu16i_BFu8c)
//============================================================================


struct  BFu17ll_BFu16i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu16i_BFu8i) C1{ FL:17 Fi:16 Fi:8}



static void Test_BFu17ll_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu8i, BFu17ll_BFu16i_BFu8i)
//============================================================================


struct  BFu17ll_BFu16i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu16i_BFu8ll) C1{ FL:17 Fi:16 FL:8}



static void Test_BFu17ll_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu8ll, BFu17ll_BFu16i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu16i_BFu8s) C1{ FL:17 Fi:16 Fs:8}



static void Test_BFu17ll_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu8s, BFu17ll_BFu16i_BFu8s)
//============================================================================


struct  BFu17ll_BFu16i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu16i_BFu9i) C1{ FL:17 Fi:16 Fi:9}



static void Test_BFu17ll_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu9i, BFu17ll_BFu16i_BFu9i)
//============================================================================


struct  BFu17ll_BFu16i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu16i_BFu9ll) C1{ FL:17 Fi:16 FL:9}



static void Test_BFu17ll_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu9ll, BFu17ll_BFu16i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu16i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu16i_BFu9s) C1{ FL:17 Fi:16 Fs:9}



static void Test_BFu17ll_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu16i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_BFu9s, BFu17ll_BFu16i_BFu9s)
//============================================================================


struct  BFu17ll_BFu16i_C  {
  __tsu64 v1:17;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu17ll_BFu16i_C) C1{ FL:17 Fi:16 Fc}



static void Test_BFu17ll_BFu16i_C()
{
  {
    init_simple_test("BFu17ll_BFu16i_C");
    static STRUCT_IF_C BFu17ll_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_C");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_C, BFu17ll_BFu16i_C)
//============================================================================


struct  BFu17ll_BFu16i_D  {
  __tsu64 v1:17;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu17ll_BFu16i_D) C1{ FL:17 Fi:16 FL}



static void Test_BFu17ll_BFu16i_D()
{
  {
    init_simple_test("BFu17ll_BFu16i_D");
    static STRUCT_IF_C BFu17ll_BFu16i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_D, BFu17ll_BFu16i_D)
//============================================================================


struct  BFu17ll_BFu16i_F  {
  __tsu64 v1:17;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu17ll_BFu16i_F) C1{ FL:17 Fi:16 Fi}



static void Test_BFu17ll_BFu16i_F()
{
  {
    init_simple_test("BFu17ll_BFu16i_F");
    static STRUCT_IF_C BFu17ll_BFu16i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_F, BFu17ll_BFu16i_F)
//============================================================================


struct  BFu17ll_BFu16i_I  {
  __tsu64 v1:17;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu17ll_BFu16i_I) C1{ FL:17 Fi:16 Fi}



static void Test_BFu17ll_BFu16i_I()
{
  {
    init_simple_test("BFu17ll_BFu16i_I");
    static STRUCT_IF_C BFu17ll_BFu16i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_I, BFu17ll_BFu16i_I)
//============================================================================


struct  BFu17ll_BFu16i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu17ll_BFu16i_Ip) C1{ FL:17 Fi:16 Fp}



static void Test_BFu17ll_BFu16i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu16i_Ip");
    static STRUCT_IF_C BFu17ll_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Ip, BFu17ll_BFu16i_Ip)
//============================================================================


struct  BFu17ll_BFu16i_L  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu16i_L) C1{ FL:17 Fi:16 FL}



static void Test_BFu17ll_BFu16i_L()
{
  {
    init_simple_test("BFu17ll_BFu16i_L");
    static STRUCT_IF_C BFu17ll_BFu16i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_L, BFu17ll_BFu16i_L)
//============================================================================


struct  BFu17ll_BFu16i_S  {
  __tsu64 v1:17;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu17ll_BFu16i_S) C1{ FL:17 Fi:16 Fs}



static void Test_BFu17ll_BFu16i_S()
{
  {
    init_simple_test("BFu17ll_BFu16i_S");
    static STRUCT_IF_C BFu17ll_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_S");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_S, BFu17ll_BFu16i_S)
//============================================================================


struct  BFu17ll_BFu16i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu16i_Uc) C1{ FL:17 Fi:16 Fc}



static void Test_BFu17ll_BFu16i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu16i_Uc");
    static STRUCT_IF_C BFu17ll_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Uc");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Uc, BFu17ll_BFu16i_Uc)
//============================================================================


struct  BFu17ll_BFu16i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu16i_Ui) C1{ FL:17 Fi:16 Fi}



static void Test_BFu17ll_BFu16i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu16i_Ui");
    static STRUCT_IF_C BFu17ll_BFu16i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Ui, BFu17ll_BFu16i_Ui)
//============================================================================


struct  BFu17ll_BFu16i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu16i_Ul) C1{ FL:17 Fi:16 FL}



static void Test_BFu17ll_BFu16i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu16i_Ul");
    static STRUCT_IF_C BFu17ll_BFu16i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Ul, BFu17ll_BFu16i_Ul)
//============================================================================


struct  BFu17ll_BFu16i_Us  {
  __tsu64 v1:17;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu16i_Us) C1{ FL:17 Fi:16 Fs}



static void Test_BFu17ll_BFu16i_Us()
{
  {
    init_simple_test("BFu17ll_BFu16i_Us");
    static STRUCT_IF_C BFu17ll_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Us");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Us, BFu17ll_BFu16i_Us)
//============================================================================


struct  BFu17ll_BFu16i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu17ll_BFu16i_Vp) C1{ FL:17 Fi:16 Fp}



static void Test_BFu17ll_BFu16i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu16i_Vp");
    static STRUCT_IF_C BFu17ll_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16i_Vp, BFu17ll_BFu16i_Vp)
//============================================================================


struct  BFu17ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu17ll_BFu16ll) C1{ FL:17 FL:16}



static void Test_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll, BFu17ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu16ll_BFu15i) C1{ FL:17 FL:16 Fi:15}



static void Test_BFu17ll_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu15i, BFu17ll_BFu16ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu16ll_BFu15ll) C1{ FL:17 FL:16 FL:15}



static void Test_BFu17ll_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu15ll, BFu17ll_BFu16ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu16ll_BFu15s) C1{ FL:17 FL:16 Fs:15}



static void Test_BFu17ll_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu17ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu15s, BFu17ll_BFu16ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu16ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu16ll_BFu16i) C1{ FL:17 FL:16 Fi:16}



static void Test_BFu17ll_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu17ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu16i, BFu17ll_BFu16ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu16ll_BFu16ll) C1{ FL:17 FL:16 FL:16}



static void Test_BFu17ll_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu17ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu16ll, BFu17ll_BFu16ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu16ll_BFu16s) C1{ FL:17 FL:16 Fs:16}



static void Test_BFu17ll_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu16s, BFu17ll_BFu16ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu16ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu16ll_BFu17i) C1{ FL:17 FL:16 Fi:17}



static void Test_BFu17ll_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu17ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu17i, BFu17ll_BFu16ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu16ll_BFu17ll) C1{ FL:17 FL:16 FL:17}



static void Test_BFu17ll_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu17ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu17ll, BFu17ll_BFu16ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu16ll_BFu1c) C1{ FL:17 FL:16 Fc:1}



static void Test_BFu17ll_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17ll_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu1c, BFu17ll_BFu16ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu16ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu16ll_BFu1i) C1{ FL:17 FL:16 Fi:1}



static void Test_BFu17ll_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17ll_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu1i, BFu17ll_BFu16ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu16ll_BFu1ll) C1{ FL:17 FL:16 FL:1}



static void Test_BFu17ll_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17ll_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu1ll, BFu17ll_BFu16ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu16ll_BFu1s) C1{ FL:17 FL:16 Fs:1}



static void Test_BFu17ll_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu17ll_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu1s, BFu17ll_BFu16ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu16ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu16ll_BFu31i) C1{ FL:17 FL:16 Fi:31}



static void Test_BFu17ll_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu17ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu31i, BFu17ll_BFu16ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu16ll_BFu31ll) C1{ FL:17 FL:16 FL:31}



static void Test_BFu17ll_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu17ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu31ll, BFu17ll_BFu16ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu16ll_BFu32i) C1{ FL:17 FL:16 Fi:32}



static void Test_BFu17ll_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu32i, BFu17ll_BFu16ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu16ll_BFu32ll) C1{ FL:17 FL:16 FL:32}



static void Test_BFu17ll_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu17ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17ll_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu32ll, BFu17ll_BFu16ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu16ll_BFu33) C1{ FL:17 FL:16 FL:33}



static void Test_BFu17ll_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu17ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17ll_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu33, BFu17ll_BFu16ll_BFu33)
//============================================================================


struct  BFu17ll_BFu16ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu16ll_BFu7c) C1{ FL:17 FL:16 Fc:7}



static void Test_BFu17ll_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu7c, BFu17ll_BFu16ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu16ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu16ll_BFu7i) C1{ FL:17 FL:16 Fi:7}



static void Test_BFu17ll_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu7i, BFu17ll_BFu16ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu16ll_BFu7ll) C1{ FL:17 FL:16 FL:7}



static void Test_BFu17ll_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu7ll, BFu17ll_BFu16ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu16ll_BFu7s) C1{ FL:17 FL:16 Fs:7}



static void Test_BFu17ll_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu17ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu7s, BFu17ll_BFu16ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu16ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu16ll_BFu8c) C1{ FL:17 FL:16 Fc:8}



static void Test_BFu17ll_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu17ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu8c, BFu17ll_BFu16ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu16ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu16ll_BFu8i) C1{ FL:17 FL:16 Fi:8}



static void Test_BFu17ll_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu8i, BFu17ll_BFu16ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu16ll_BFu8ll) C1{ FL:17 FL:16 FL:8}



static void Test_BFu17ll_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu8ll, BFu17ll_BFu16ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu16ll_BFu8s) C1{ FL:17 FL:16 Fs:8}



static void Test_BFu17ll_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu17ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu8s, BFu17ll_BFu16ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu16ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu16ll_BFu9i) C1{ FL:17 FL:16 Fi:9}



static void Test_BFu17ll_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu9i, BFu17ll_BFu16ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu16ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu16ll_BFu9ll) C1{ FL:17 FL:16 FL:9}



static void Test_BFu17ll_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu9ll, BFu17ll_BFu16ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu16ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu16ll_BFu9s) C1{ FL:17 FL:16 Fs:9}



static void Test_BFu17ll_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu17ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_BFu9s, BFu17ll_BFu16ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu16ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu17ll_BFu16ll_C) C1{ FL:17 FL:16 Fc}



static void Test_BFu17ll_BFu16ll_C()
{
  {
    init_simple_test("BFu17ll_BFu16ll_C");
    static STRUCT_IF_C BFu17ll_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_C");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_C, BFu17ll_BFu16ll_C)
//============================================================================


struct  BFu17ll_BFu16ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu17ll_BFu16ll_D) C1{ FL:17 FL:16 FL}



static void Test_BFu17ll_BFu16ll_D()
{
  {
    init_simple_test("BFu17ll_BFu16ll_D");
    static STRUCT_IF_C BFu17ll_BFu16ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_D, BFu17ll_BFu16ll_D)
//============================================================================


struct  BFu17ll_BFu16ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu17ll_BFu16ll_F) C1{ FL:17 FL:16 Fi}



static void Test_BFu17ll_BFu16ll_F()
{
  {
    init_simple_test("BFu17ll_BFu16ll_F");
    static STRUCT_IF_C BFu17ll_BFu16ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_F, BFu17ll_BFu16ll_F)
//============================================================================


struct  BFu17ll_BFu16ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu17ll_BFu16ll_I) C1{ FL:17 FL:16 Fi}



static void Test_BFu17ll_BFu16ll_I()
{
  {
    init_simple_test("BFu17ll_BFu16ll_I");
    static STRUCT_IF_C BFu17ll_BFu16ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_I, BFu17ll_BFu16ll_I)
//============================================================================


struct  BFu17ll_BFu16ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu17ll_BFu16ll_Ip) C1{ FL:17 FL:16 Fp}



static void Test_BFu17ll_BFu16ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Ip, BFu17ll_BFu16ll_Ip)
//============================================================================


struct  BFu17ll_BFu16ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu16ll_L) C1{ FL:17 FL:16 FL}



static void Test_BFu17ll_BFu16ll_L()
{
  {
    init_simple_test("BFu17ll_BFu16ll_L");
    static STRUCT_IF_C BFu17ll_BFu16ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_L, BFu17ll_BFu16ll_L)
//============================================================================


struct  BFu17ll_BFu16ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu17ll_BFu16ll_S) C1{ FL:17 FL:16 Fs}



static void Test_BFu17ll_BFu16ll_S()
{
  {
    init_simple_test("BFu17ll_BFu16ll_S");
    static STRUCT_IF_C BFu17ll_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_S");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_S, BFu17ll_BFu16ll_S)
//============================================================================


struct  BFu17ll_BFu16ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu16ll_Uc) C1{ FL:17 FL:16 Fc}



static void Test_BFu17ll_BFu16ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Uc");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Uc, BFu17ll_BFu16ll_Uc)
//============================================================================


struct  BFu17ll_BFu16ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu16ll_Ui) C1{ FL:17 FL:16 Fi}



static void Test_BFu17ll_BFu16ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu16ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Ui, BFu17ll_BFu16ll_Ui)
//============================================================================


struct  BFu17ll_BFu16ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu16ll_Ul) C1{ FL:17 FL:16 FL}



static void Test_BFu17ll_BFu16ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu16ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Ul, BFu17ll_BFu16ll_Ul)
//============================================================================


struct  BFu17ll_BFu16ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu16ll_Us) C1{ FL:17 FL:16 Fs}



static void Test_BFu17ll_BFu16ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Us");
    static STRUCT_IF_C BFu17ll_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Us");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Us, BFu17ll_BFu16ll_Us)
//============================================================================


struct  BFu17ll_BFu16ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu17ll_BFu16ll_Vp) C1{ FL:17 FL:16 Fp}



static void Test_BFu17ll_BFu16ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu16ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16ll_Vp, BFu17ll_BFu16ll_Vp)
//============================================================================


struct  BFu17ll_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu17ll_BFu16s) C1{ FL:17 Fs:16}



static void Test_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s, BFu17ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu16s_BFu15i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu16s_BFu15i) C1{ FL:17 Fs:16 Fi:15}



static void Test_BFu17ll_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu15i, BFu17ll_BFu16s_BFu15i)
//============================================================================


struct  BFu17ll_BFu16s_BFu15ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu16s_BFu15ll) C1{ FL:17 Fs:16 FL:15}



static void Test_BFu17ll_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu15ll, BFu17ll_BFu16s_BFu15ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu16s_BFu15s) C1{ FL:17 Fs:16 Fs:15}



static void Test_BFu17ll_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu15s, BFu17ll_BFu16s_BFu15s)
//============================================================================


struct  BFu17ll_BFu16s_BFu16i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu16s_BFu16i) C1{ FL:17 Fs:16 Fi:16}



static void Test_BFu17ll_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu16i, BFu17ll_BFu16s_BFu16i)
//============================================================================


struct  BFu17ll_BFu16s_BFu16ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu16s_BFu16ll) C1{ FL:17 Fs:16 FL:16}



static void Test_BFu17ll_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu16ll, BFu17ll_BFu16s_BFu16ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu16s_BFu16s) C1{ FL:17 Fs:16 Fs:16}



static void Test_BFu17ll_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu16s, BFu17ll_BFu16s_BFu16s)
//============================================================================


struct  BFu17ll_BFu16s_BFu17i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu16s_BFu17i) C1{ FL:17 Fs:16 Fi:17}



static void Test_BFu17ll_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu17i, BFu17ll_BFu16s_BFu17i)
//============================================================================


struct  BFu17ll_BFu16s_BFu17ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu16s_BFu17ll) C1{ FL:17 Fs:16 FL:17}



static void Test_BFu17ll_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu17ll, BFu17ll_BFu16s_BFu17ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu1c  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu16s_BFu1c) C1{ FL:17 Fs:16 Fc:1}



static void Test_BFu17ll_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu1c, BFu17ll_BFu16s_BFu1c)
//============================================================================


struct  BFu17ll_BFu16s_BFu1i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu16s_BFu1i) C1{ FL:17 Fs:16 Fi:1}



static void Test_BFu17ll_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu1i, BFu17ll_BFu16s_BFu1i)
//============================================================================


struct  BFu17ll_BFu16s_BFu1ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu16s_BFu1ll) C1{ FL:17 Fs:16 FL:1}



static void Test_BFu17ll_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu1ll, BFu17ll_BFu16s_BFu1ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu16s_BFu1s) C1{ FL:17 Fs:16 Fs:1}



static void Test_BFu17ll_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu1s, BFu17ll_BFu16s_BFu1s)
//============================================================================


struct  BFu17ll_BFu16s_BFu31i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu16s_BFu31i) C1{ FL:17 Fs:16 Fi:31}



static void Test_BFu17ll_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu31i, BFu17ll_BFu16s_BFu31i)
//============================================================================


struct  BFu17ll_BFu16s_BFu31ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu16s_BFu31ll) C1{ FL:17 Fs:16 FL:31}



static void Test_BFu17ll_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu31ll, BFu17ll_BFu16s_BFu31ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu32i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu16s_BFu32i) C1{ FL:17 Fs:16 Fi:32}



static void Test_BFu17ll_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu32i, BFu17ll_BFu16s_BFu32i)
//============================================================================


struct  BFu17ll_BFu16s_BFu32ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu16s_BFu32ll) C1{ FL:17 Fs:16 FL:32}



static void Test_BFu17ll_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu32ll, BFu17ll_BFu16s_BFu32ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu33  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu16s_BFu33) C1{ FL:17 Fs:16 FL:33}



static void Test_BFu17ll_BFu16s_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu33");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu33, BFu17ll_BFu16s_BFu33)
//============================================================================


struct  BFu17ll_BFu16s_BFu7c  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu16s_BFu7c) C1{ FL:17 Fs:16 Fc:7}



static void Test_BFu17ll_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu7c, BFu17ll_BFu16s_BFu7c)
//============================================================================


struct  BFu17ll_BFu16s_BFu7i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu16s_BFu7i) C1{ FL:17 Fs:16 Fi:7}



static void Test_BFu17ll_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu7i, BFu17ll_BFu16s_BFu7i)
//============================================================================


struct  BFu17ll_BFu16s_BFu7ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu16s_BFu7ll) C1{ FL:17 Fs:16 FL:7}



static void Test_BFu17ll_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu7ll, BFu17ll_BFu16s_BFu7ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu7s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu16s_BFu7s) C1{ FL:17 Fs:16 Fs:7}



static void Test_BFu17ll_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu7s, BFu17ll_BFu16s_BFu7s)
//============================================================================


struct  BFu17ll_BFu16s_BFu8c  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu16s_BFu8c) C1{ FL:17 Fs:16 Fc:8}



static void Test_BFu17ll_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu8c, BFu17ll_BFu16s_BFu8c)
//============================================================================


struct  BFu17ll_BFu16s_BFu8i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu16s_BFu8i) C1{ FL:17 Fs:16 Fi:8}



static void Test_BFu17ll_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu8i, BFu17ll_BFu16s_BFu8i)
//============================================================================


struct  BFu17ll_BFu16s_BFu8ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu16s_BFu8ll) C1{ FL:17 Fs:16 FL:8}



static void Test_BFu17ll_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu8ll, BFu17ll_BFu16s_BFu8ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu8s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu16s_BFu8s) C1{ FL:17 Fs:16 Fs:8}



static void Test_BFu17ll_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu8s, BFu17ll_BFu16s_BFu8s)
//============================================================================


struct  BFu17ll_BFu16s_BFu9i  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu16s_BFu9i) C1{ FL:17 Fs:16 Fi:9}



static void Test_BFu17ll_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu9i, BFu17ll_BFu16s_BFu9i)
//============================================================================


struct  BFu17ll_BFu16s_BFu9ll  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu16s_BFu9ll) C1{ FL:17 Fs:16 FL:9}



static void Test_BFu17ll_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu9ll, BFu17ll_BFu16s_BFu9ll)
//============================================================================


struct  BFu17ll_BFu16s_BFu9s  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu16s_BFu9s) C1{ FL:17 Fs:16 Fs:9}



static void Test_BFu17ll_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu16s_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_BFu9s, BFu17ll_BFu16s_BFu9s)
//============================================================================


struct  BFu17ll_BFu16s_C  {
  __tsu64 v1:17;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu17ll_BFu16s_C) C1{ FL:17 Fs:16 Fc}



static void Test_BFu17ll_BFu16s_C()
{
  {
    init_simple_test("BFu17ll_BFu16s_C");
    static STRUCT_IF_C BFu17ll_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_C");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_C, BFu17ll_BFu16s_C)
//============================================================================


struct  BFu17ll_BFu16s_D  {
  __tsu64 v1:17;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu17ll_BFu16s_D) C1{ FL:17 Fs:16 FL}



static void Test_BFu17ll_BFu16s_D()
{
  {
    init_simple_test("BFu17ll_BFu16s_D");
    static STRUCT_IF_C BFu17ll_BFu16s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_D, BFu17ll_BFu16s_D)
//============================================================================


struct  BFu17ll_BFu16s_F  {
  __tsu64 v1:17;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu17ll_BFu16s_F) C1{ FL:17 Fs:16 Fi}



static void Test_BFu17ll_BFu16s_F()
{
  {
    init_simple_test("BFu17ll_BFu16s_F");
    static STRUCT_IF_C BFu17ll_BFu16s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_F, BFu17ll_BFu16s_F)
//============================================================================


struct  BFu17ll_BFu16s_I  {
  __tsu64 v1:17;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu17ll_BFu16s_I) C1{ FL:17 Fs:16 Fi}



static void Test_BFu17ll_BFu16s_I()
{
  {
    init_simple_test("BFu17ll_BFu16s_I");
    static STRUCT_IF_C BFu17ll_BFu16s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_I, BFu17ll_BFu16s_I)
//============================================================================


struct  BFu17ll_BFu16s_Ip  {
  __tsu64 v1:17;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu17ll_BFu16s_Ip) C1{ FL:17 Fs:16 Fp}



static void Test_BFu17ll_BFu16s_Ip()
{
  {
    init_simple_test("BFu17ll_BFu16s_Ip");
    static STRUCT_IF_C BFu17ll_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Ip, BFu17ll_BFu16s_Ip)
//============================================================================


struct  BFu17ll_BFu16s_L  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu16s_L) C1{ FL:17 Fs:16 FL}



static void Test_BFu17ll_BFu16s_L()
{
  {
    init_simple_test("BFu17ll_BFu16s_L");
    static STRUCT_IF_C BFu17ll_BFu16s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_L, BFu17ll_BFu16s_L)
//============================================================================


struct  BFu17ll_BFu16s_S  {
  __tsu64 v1:17;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu17ll_BFu16s_S) C1{ FL:17 Fs:16 Fs}



static void Test_BFu17ll_BFu16s_S()
{
  {
    init_simple_test("BFu17ll_BFu16s_S");
    static STRUCT_IF_C BFu17ll_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_S");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_S, BFu17ll_BFu16s_S)
//============================================================================


struct  BFu17ll_BFu16s_Uc  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu16s_Uc) C1{ FL:17 Fs:16 Fc}



static void Test_BFu17ll_BFu16s_Uc()
{
  {
    init_simple_test("BFu17ll_BFu16s_Uc");
    static STRUCT_IF_C BFu17ll_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Uc");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Uc, BFu17ll_BFu16s_Uc)
//============================================================================


struct  BFu17ll_BFu16s_Ui  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu16s_Ui) C1{ FL:17 Fs:16 Fi}



static void Test_BFu17ll_BFu16s_Ui()
{
  {
    init_simple_test("BFu17ll_BFu16s_Ui");
    static STRUCT_IF_C BFu17ll_BFu16s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Ui, BFu17ll_BFu16s_Ui)
//============================================================================


struct  BFu17ll_BFu16s_Ul  {
  __tsu64 v1:17;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu16s_Ul) C1{ FL:17 Fs:16 FL}



static void Test_BFu17ll_BFu16s_Ul()
{
  {
    init_simple_test("BFu17ll_BFu16s_Ul");
    static STRUCT_IF_C BFu17ll_BFu16s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Ul, BFu17ll_BFu16s_Ul)
//============================================================================


struct  BFu17ll_BFu16s_Us  {
  __tsu64 v1:17;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu16s_Us) C1{ FL:17 Fs:16 Fs}



static void Test_BFu17ll_BFu16s_Us()
{
  {
    init_simple_test("BFu17ll_BFu16s_Us");
    static STRUCT_IF_C BFu17ll_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Us");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Us, BFu17ll_BFu16s_Us)
//============================================================================


struct  BFu17ll_BFu16s_Vp  {
  __tsu64 v1:17;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu17ll_BFu16s_Vp) C1{ FL:17 Fs:16 Fp}



static void Test_BFu17ll_BFu16s_Vp()
{
  {
    init_simple_test("BFu17ll_BFu16s_Vp");
    static STRUCT_IF_C BFu17ll_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu16s_Vp, BFu17ll_BFu16s_Vp)
//============================================================================


struct  BFu17ll_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu17ll_BFu17i) C1{ FL:17 Fi:17}



static void Test_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i, BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed int v3:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17i) C1{ FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17i, BFu17ll_BFu17i_BFs17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17i_BFs17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17i_BFs17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17i_BFs17i, BFu17ll_BFu17i_BFs17i_BFs17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17i_BFs17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17i_BFs17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFu17i_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17i_BFs17ll, BFu17ll_BFu17i_BFs17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFs17i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17i_BFu17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17i_BFu17i, BFu17ll_BFu17i_BFs17i_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17i_BFu17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFu17i_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17i_BFu17ll, BFu17ll_BFu17i_BFs17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFs17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17ll) C1{ FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17ll, BFu17ll_BFu17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFs17ll_BFs17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17ll_BFs17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17ll_BFs17i, BFu17ll_BFu17i_BFs17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17ll_BFs17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17ll_BFs17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17i_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17ll_BFs17ll, BFu17ll_BFu17i_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFs17ll_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17ll_BFu17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17ll_BFu17i, BFu17ll_BFu17i_BFs17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFs17ll_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFs17ll_BFu17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17i_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFu17i_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFs17ll_BFu17ll, BFu17ll_BFu17i_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu17i_BFu15i) C1{ FL:17 Fi:17 Fi:15}



static void Test_BFu17ll_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu15i, BFu17ll_BFu17i_BFu15i)
//============================================================================


struct  BFu17ll_BFu17i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu17i_BFu15ll) C1{ FL:17 Fi:17 FL:15}



static void Test_BFu17ll_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu15ll, BFu17ll_BFu17i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu17i_BFu15s) C1{ FL:17 Fi:17 Fs:15}



static void Test_BFu17ll_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu15s, BFu17ll_BFu17i_BFu15s)
//============================================================================


struct  BFu17ll_BFu17i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu17i_BFu16i) C1{ FL:17 Fi:17 Fi:16}



static void Test_BFu17ll_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu16i, BFu17ll_BFu17i_BFu16i)
//============================================================================


struct  BFu17ll_BFu17i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu17i_BFu16ll) C1{ FL:17 Fi:17 FL:16}



static void Test_BFu17ll_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu17ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu17ll_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu16ll, BFu17ll_BFu17i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu17i_BFu16s) C1{ FL:17 Fi:17 Fs:16}



static void Test_BFu17ll_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu16s, BFu17ll_BFu17i_BFu16s)
//============================================================================


struct  BFu17ll_BFu17i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17i) C1{ FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17i, BFu17ll_BFu17i_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFu17i_BFs17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17i_BFs17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17i_BFs17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17i_BFs17i, BFu17ll_BFu17i_BFu17i_BFs17i)
//============================================================================


struct  BFu17ll_BFu17i_BFu17i_BFs17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17i_BFs17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17i_BFs17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFu17i_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17i_BFs17ll, BFu17ll_BFu17i_BFu17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu17i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17i_BFu17i) C1{ FL:17 Fi:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 12, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17i_BFu17i, BFu17ll_BFu17i_BFu17i_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFu17i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17i_BFu17ll) C1{ FL:17 Fi:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, 1, "BFu17ll_BFu17i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, 10, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17i_BFu17ll, BFu17ll_BFu17i_BFu17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17ll) C1{ FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17ll, BFu17ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu17ll_BFs17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17ll_BFs17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17ll_BFs17i, BFu17ll_BFu17i_BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFu17i_BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17ll_BFs17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17i_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_sll(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17ll_BFs17ll, BFu17ll_BFu17i_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu17ll_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17ll_BFu17i) C1{ FL:17 Fi:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, ABISELECT(12,8), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17ll_BFu17i, BFu17ll_BFu17i_BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17i_BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17i_BFu17ll_BFu17ll) C1{ FL:17 Fi:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, 1, "BFu17ll_BFu17i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(10,8), ABISELECT(1,2), 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu17ll_BFu17ll, BFu17ll_BFu17i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu17i_BFu1c) C1{ FL:17 Fi:17 Fc:1}



static void Test_BFu17ll_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu1c, BFu17ll_BFu17i_BFu1c)
//============================================================================


struct  BFu17ll_BFu17i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu17i_BFu1i) C1{ FL:17 Fi:17 Fi:1}



static void Test_BFu17ll_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu1i, BFu17ll_BFu17i_BFu1i)
//============================================================================


struct  BFu17ll_BFu17i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu17i_BFu1ll) C1{ FL:17 Fi:17 FL:1}



static void Test_BFu17ll_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu1ll, BFu17ll_BFu17i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu17i_BFu1s) C1{ FL:17 Fi:17 Fs:1}



static void Test_BFu17ll_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu1s, BFu17ll_BFu17i_BFu1s)
//============================================================================


struct  BFu17ll_BFu17i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu17i_BFu31i) C1{ FL:17 Fi:17 Fi:31}



static void Test_BFu17ll_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu31i, BFu17ll_BFu17i_BFu31i)
//============================================================================


struct  BFu17ll_BFu17i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu17i_BFu31ll) C1{ FL:17 Fi:17 FL:31}



static void Test_BFu17ll_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu17ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu17ll_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu31ll, BFu17ll_BFu17i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu17i_BFu32i) C1{ FL:17 Fi:17 Fi:32}



static void Test_BFu17ll_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu32i, BFu17ll_BFu17i_BFu32i)
//============================================================================


struct  BFu17ll_BFu17i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu17i_BFu32ll) C1{ FL:17 Fi:17 FL:32}



static void Test_BFu17ll_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu17ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17ll_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu32ll, BFu17ll_BFu17i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu17i_BFu33) C1{ FL:17 Fi:17 FL:33}



static void Test_BFu17ll_BFu17i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu17ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17ll_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu33, BFu17ll_BFu17i_BFu33)
//============================================================================


struct  BFu17ll_BFu17i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu17i_BFu7c) C1{ FL:17 Fi:17 Fc:7}



static void Test_BFu17ll_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu7c, BFu17ll_BFu17i_BFu7c)
//============================================================================


struct  BFu17ll_BFu17i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu17i_BFu7i) C1{ FL:17 Fi:17 Fi:7}



static void Test_BFu17ll_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu7i, BFu17ll_BFu17i_BFu7i)
//============================================================================


struct  BFu17ll_BFu17i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu17i_BFu7ll) C1{ FL:17 Fi:17 FL:7}



static void Test_BFu17ll_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu7ll, BFu17ll_BFu17i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu17i_BFu7s) C1{ FL:17 Fi:17 Fs:7}



static void Test_BFu17ll_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu7s, BFu17ll_BFu17i_BFu7s)
//============================================================================


struct  BFu17ll_BFu17i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu17i_BFu8c) C1{ FL:17 Fi:17 Fc:8}



static void Test_BFu17ll_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu8c, BFu17ll_BFu17i_BFu8c)
//============================================================================


struct  BFu17ll_BFu17i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu17i_BFu8i) C1{ FL:17 Fi:17 Fi:8}



static void Test_BFu17ll_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu8i, BFu17ll_BFu17i_BFu8i)
//============================================================================


struct  BFu17ll_BFu17i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu17i_BFu8ll) C1{ FL:17 Fi:17 FL:8}



static void Test_BFu17ll_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu8ll, BFu17ll_BFu17i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu17i_BFu8s) C1{ FL:17 Fi:17 Fs:8}



static void Test_BFu17ll_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu8s, BFu17ll_BFu17i_BFu8s)
//============================================================================


struct  BFu17ll_BFu17i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu17i_BFu9i) C1{ FL:17 Fi:17 Fi:9}



static void Test_BFu17ll_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu9i, BFu17ll_BFu17i_BFu9i)
//============================================================================


struct  BFu17ll_BFu17i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu17i_BFu9ll) C1{ FL:17 Fi:17 FL:9}



static void Test_BFu17ll_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu9ll, BFu17ll_BFu17i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu17i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu17i_BFu9s) C1{ FL:17 Fi:17 Fs:9}



static void Test_BFu17ll_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu17i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_BFu9s, BFu17ll_BFu17i_BFu9s)
//============================================================================


struct  BFu17ll_BFu17i_C  {
  __tsu64 v1:17;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu17ll_BFu17i_C) C1{ FL:17 Fi:17 Fc}



static void Test_BFu17ll_BFu17i_C()
{
  {
    init_simple_test("BFu17ll_BFu17i_C");
    static STRUCT_IF_C BFu17ll_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_C");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_C, BFu17ll_BFu17i_C)
//============================================================================


struct  BFu17ll_BFu17i_D  {
  __tsu64 v1:17;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu17ll_BFu17i_D) C1{ FL:17 Fi:17 FL}



static void Test_BFu17ll_BFu17i_D()
{
  {
    init_simple_test("BFu17ll_BFu17i_D");
    static STRUCT_IF_C BFu17ll_BFu17i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_D, BFu17ll_BFu17i_D)
//============================================================================


struct  BFu17ll_BFu17i_F  {
  __tsu64 v1:17;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu17ll_BFu17i_F) C1{ FL:17 Fi:17 Fi}



static void Test_BFu17ll_BFu17i_F()
{
  {
    init_simple_test("BFu17ll_BFu17i_F");
    static STRUCT_IF_C BFu17ll_BFu17i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_F, BFu17ll_BFu17i_F)
//============================================================================


struct  BFu17ll_BFu17i_I  {
  __tsu64 v1:17;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu17ll_BFu17i_I) C1{ FL:17 Fi:17 Fi}



static void Test_BFu17ll_BFu17i_I()
{
  {
    init_simple_test("BFu17ll_BFu17i_I");
    static STRUCT_IF_C BFu17ll_BFu17i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_I, BFu17ll_BFu17i_I)
//============================================================================


struct  BFu17ll_BFu17i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu17ll_BFu17i_Ip) C1{ FL:17 Fi:17 Fp}



static void Test_BFu17ll_BFu17i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu17i_Ip");
    static STRUCT_IF_C BFu17ll_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Ip, BFu17ll_BFu17i_Ip)
//============================================================================


struct  BFu17ll_BFu17i_L  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu17i_L) C1{ FL:17 Fi:17 FL}



static void Test_BFu17ll_BFu17i_L()
{
  {
    init_simple_test("BFu17ll_BFu17i_L");
    static STRUCT_IF_C BFu17ll_BFu17i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_L, BFu17ll_BFu17i_L)
//============================================================================


struct  BFu17ll_BFu17i_S  {
  __tsu64 v1:17;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu17ll_BFu17i_S) C1{ FL:17 Fi:17 Fs}



static void Test_BFu17ll_BFu17i_S()
{
  {
    init_simple_test("BFu17ll_BFu17i_S");
    static STRUCT_IF_C BFu17ll_BFu17i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_S");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_S, BFu17ll_BFu17i_S)
//============================================================================


struct  BFu17ll_BFu17i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu17i_Uc) C1{ FL:17 Fi:17 Fc}



static void Test_BFu17ll_BFu17i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu17i_Uc");
    static STRUCT_IF_C BFu17ll_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Uc");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Uc, BFu17ll_BFu17i_Uc)
//============================================================================


struct  BFu17ll_BFu17i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu17i_Ui) C1{ FL:17 Fi:17 Fi}



static void Test_BFu17ll_BFu17i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu17i_Ui");
    static STRUCT_IF_C BFu17ll_BFu17i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Ui, BFu17ll_BFu17i_Ui)
//============================================================================


struct  BFu17ll_BFu17i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu17i_Ul) C1{ FL:17 Fi:17 FL}



static void Test_BFu17ll_BFu17i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu17i_Ul");
    static STRUCT_IF_C BFu17ll_BFu17i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Ul, BFu17ll_BFu17i_Ul)
//============================================================================


struct  BFu17ll_BFu17i_Us  {
  __tsu64 v1:17;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu17i_Us) C1{ FL:17 Fi:17 Fs}



static void Test_BFu17ll_BFu17i_Us()
{
  {
    init_simple_test("BFu17ll_BFu17i_Us");
    static STRUCT_IF_C BFu17ll_BFu17i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Us");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Us, BFu17ll_BFu17i_Us)
//============================================================================


struct  BFu17ll_BFu17i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu17ll_BFu17i_Vp) C1{ FL:17 Fi:17 Fp}



static void Test_BFu17ll_BFu17i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu17i_Vp");
    static STRUCT_IF_C BFu17ll_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17i_Vp, BFu17ll_BFu17i_Vp)
//============================================================================


struct  BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu17ll_BFu17ll) C1{ FL:17 FL:17}



static void Test_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll, BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed int v3:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17i) C1{ FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17i, BFu17ll_BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17i_BFs17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17i_BFs17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFs17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17i_BFs17i, BFu17ll_BFu17ll_BFs17i_BFs17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17i_BFs17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17i_BFs17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFs17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFs17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17i_BFs17ll, BFu17ll_BFu17ll_BFs17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17i_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17i_BFu17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFs17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17i_BFu17i, BFu17ll_BFu17ll_BFs17i_BFu17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17i_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17i_BFu17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFs17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFs17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17i_BFu17ll, BFu17ll_BFu17ll_BFs17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17ll) C1{ FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17ll, BFu17ll_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17ll_BFs17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17ll_BFs17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFs17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17ll_BFs17i, BFu17ll_BFu17ll_BFs17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17ll_BFs17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17ll_BFs17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFs17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17ll_BFs17ll, BFu17ll_BFu17ll_BFs17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17ll_BFu17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFs17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17ll_BFu17i, BFu17ll_BFu17ll_BFs17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFs17ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  signed __tsi64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFs17ll_BFu17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFs17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFs17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFs17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFs17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFs17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFs17ll_BFu17ll, BFu17ll_BFu17ll_BFs17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu17ll_BFu15i) C1{ FL:17 FL:17 Fi:15}



static void Test_BFu17ll_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 2, 15, 1, "BFu17ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu15i, BFu17ll_BFu17ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu17ll_BFu15ll) C1{ FL:17 FL:17 FL:15}



static void Test_BFu17ll_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 2, 15, 1, "BFu17ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu15ll, BFu17ll_BFu17ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu17ll_BFu15s) C1{ FL:17 FL:17 Fs:15}



static void Test_BFu17ll_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu15s, BFu17ll_BFu17ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu17ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu17ll_BFu16i) C1{ FL:17 FL:17 Fi:16}



static void Test_BFu17ll_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 2, 16, 1, "BFu17ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu16i, BFu17ll_BFu17ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu17ll_BFu16ll) C1{ FL:17 FL:17 FL:16}



static void Test_BFu17ll_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 2, 16, 1, "BFu17ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu16ll, BFu17ll_BFu17ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu17ll_BFu16s) C1{ FL:17 FL:17 Fs:16}



static void Test_BFu17ll_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu16s, BFu17ll_BFu17ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17i) C1{ FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17i, BFu17ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17i_BFs17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17i_BFs17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFu17i_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17i_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17i_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17i_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17i_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17i_BFs17i, BFu17ll_BFu17ll_BFu17i_BFs17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17i_BFs17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17i_BFs17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFu17i_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17i_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17i_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17i_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17i_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFu17i_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17i_BFs17ll, BFu17ll_BFu17ll_BFu17i_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17i_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17i_BFu17i) C1{ FL:17 FL:17 Fi:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17i_BFu17i, BFu17ll_BFu17ll_BFu17i_BFu17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17i_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17i_BFu17ll) C1{ FL:17 FL:17 Fi:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17i_BFu17ll, BFu17ll_BFu17ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17ll) C1{ FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17ll, BFu17ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17ll_BFs17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  signed int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17ll_BFs17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFu17ll_BFs17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17ll_BFs17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17ll_BFs17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17ll_BFs17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17ll_BFs17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17ll_BFs17i, BFu17ll_BFu17ll_BFu17ll_BFs17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17ll_BFs17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  signed __tsi64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17ll_BFs17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFu17ll_BFs17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17ll_BFs17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17ll_BFs17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17ll_BFs17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_sll(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFs17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17ll_BFs17ll, BFu17ll_BFu17ll_BFu17ll_BFs17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  unsigned int v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17ll_BFu17i) C1{ FL:17 FL:17 FL:17 Fi:17}



static void Test_BFu17ll_BFu17ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v4, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17ll_BFu17i, BFu17ll_BFu17ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu17ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:17;
  __tsu64 v4:17;
};
//SIG(1 BFu17ll_BFu17ll_BFu17ll_BFu17ll) C1{ FL:17 FL:17 FL:17 FL:17}



static void Test_BFu17ll_BFu17ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, 1, "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v4, ABISELECT(8,6), ABISELECT(0,3), 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu17ll_BFu17ll, BFu17ll_BFu17ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu17ll_BFu1c) C1{ FL:17 FL:17 Fc:1}



static void Test_BFu17ll_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17ll_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu1c, BFu17ll_BFu17ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu17ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu17ll_BFu1i) C1{ FL:17 FL:17 Fi:1}



static void Test_BFu17ll_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17ll_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu1i, BFu17ll_BFu17ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu17ll_BFu1ll) C1{ FL:17 FL:17 FL:1}



static void Test_BFu17ll_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17ll_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu1ll, BFu17ll_BFu17ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu17ll_BFu1s) C1{ FL:17 FL:17 Fs:1}



static void Test_BFu17ll_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 2, 1, 1, "BFu17ll_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu1s, BFu17ll_BFu17ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu17ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu17ll_BFu31i) C1{ FL:17 FL:17 Fi:31}



static void Test_BFu17ll_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu31i, BFu17ll_BFu17ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu17ll_BFu31ll) C1{ FL:17 FL:17 FL:31}



static void Test_BFu17ll_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 31, 1, "BFu17ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 31, hide_ull(1LL<<30), "BFu17ll_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu31ll, BFu17ll_BFu17ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu17ll_BFu32i) C1{ FL:17 FL:17 Fi:32}



static void Test_BFu17ll_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu32i, BFu17ll_BFu17ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu17ll_BFu32ll) C1{ FL:17 FL:17 FL:32}



static void Test_BFu17ll_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 32, 1, "BFu17ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 32, hide_ull(1LL<<31), "BFu17ll_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu32ll, BFu17ll_BFu17ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu17ll_BFu33) C1{ FL:17 FL:17 FL:33}



static void Test_BFu17ll_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 33, 1, "BFu17ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFu17ll_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu33, BFu17ll_BFu17ll_BFu33)
//============================================================================


struct  BFu17ll_BFu17ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu17ll_BFu7c) C1{ FL:17 FL:17 Fc:7}



static void Test_BFu17ll_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu17ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu7c, BFu17ll_BFu17ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu17ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu17ll_BFu7i) C1{ FL:17 FL:17 Fi:7}



static void Test_BFu17ll_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu7i, BFu17ll_BFu17ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu17ll_BFu7ll) C1{ FL:17 FL:17 FL:7}



static void Test_BFu17ll_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu7ll, BFu17ll_BFu17ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu17ll_BFu7s) C1{ FL:17 FL:17 Fs:7}



static void Test_BFu17ll_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 2, 7, 1, "BFu17ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu7s, BFu17ll_BFu17ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu17ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu17ll_BFu8c) C1{ FL:17 FL:17 Fc:8}



static void Test_BFu17ll_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu17ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu8c, BFu17ll_BFu17ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu17ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu17ll_BFu8i) C1{ FL:17 FL:17 Fi:8}



static void Test_BFu17ll_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu8i, BFu17ll_BFu17ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu17ll_BFu8ll) C1{ FL:17 FL:17 FL:8}



static void Test_BFu17ll_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu8ll, BFu17ll_BFu17ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu17ll_BFu8s) C1{ FL:17 FL:17 Fs:8}



static void Test_BFu17ll_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 2, 8, 1, "BFu17ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu8s, BFu17ll_BFu17ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu17ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu17ll_BFu9i) C1{ FL:17 FL:17 Fi:9}



static void Test_BFu17ll_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu9i, BFu17ll_BFu17ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu17ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu17ll_BFu9ll) C1{ FL:17 FL:17 FL:9}



static void Test_BFu17ll_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu9ll, BFu17ll_BFu17ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu17ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu17ll_BFu9s) C1{ FL:17 FL:17 Fs:9}



static void Test_BFu17ll_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 2, 9, 1, "BFu17ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_BFu9s, BFu17ll_BFu17ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu17ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu17ll_BFu17ll_C) C1{ FL:17 FL:17 Fc}



static void Test_BFu17ll_BFu17ll_C()
{
  {
    init_simple_test("BFu17ll_BFu17ll_C");
    static STRUCT_IF_C BFu17ll_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_C");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_C, BFu17ll_BFu17ll_C)
//============================================================================


struct  BFu17ll_BFu17ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu17ll_BFu17ll_D) C1{ FL:17 FL:17 FL}



static void Test_BFu17ll_BFu17ll_D()
{
  {
    init_simple_test("BFu17ll_BFu17ll_D");
    static STRUCT_IF_C BFu17ll_BFu17ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_D, BFu17ll_BFu17ll_D)
//============================================================================


struct  BFu17ll_BFu17ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu17ll_BFu17ll_F) C1{ FL:17 FL:17 Fi}



static void Test_BFu17ll_BFu17ll_F()
{
  {
    init_simple_test("BFu17ll_BFu17ll_F");
    static STRUCT_IF_C BFu17ll_BFu17ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_F, BFu17ll_BFu17ll_F)
//============================================================================


struct  BFu17ll_BFu17ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu17ll_BFu17ll_I) C1{ FL:17 FL:17 Fi}



static void Test_BFu17ll_BFu17ll_I()
{
  {
    init_simple_test("BFu17ll_BFu17ll_I");
    static STRUCT_IF_C BFu17ll_BFu17ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_I, BFu17ll_BFu17ll_I)
//============================================================================


struct  BFu17ll_BFu17ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu17ll_BFu17ll_Ip) C1{ FL:17 FL:17 Fp}



static void Test_BFu17ll_BFu17ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Ip, BFu17ll_BFu17ll_Ip)
//============================================================================


struct  BFu17ll_BFu17ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu17ll_L) C1{ FL:17 FL:17 FL}



static void Test_BFu17ll_BFu17ll_L()
{
  {
    init_simple_test("BFu17ll_BFu17ll_L");
    static STRUCT_IF_C BFu17ll_BFu17ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_L, BFu17ll_BFu17ll_L)
//============================================================================


struct  BFu17ll_BFu17ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu17ll_BFu17ll_S) C1{ FL:17 FL:17 Fs}



static void Test_BFu17ll_BFu17ll_S()
{
  {
    init_simple_test("BFu17ll_BFu17ll_S");
    static STRUCT_IF_C BFu17ll_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_S");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_S, BFu17ll_BFu17ll_S)
//============================================================================


struct  BFu17ll_BFu17ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu17ll_Uc) C1{ FL:17 FL:17 Fc}



static void Test_BFu17ll_BFu17ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Uc");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Uc, BFu17ll_BFu17ll_Uc)
//============================================================================


struct  BFu17ll_BFu17ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu17ll_Ui) C1{ FL:17 FL:17 Fi}



static void Test_BFu17ll_BFu17ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu17ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Ui, BFu17ll_BFu17ll_Ui)
//============================================================================


struct  BFu17ll_BFu17ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu17ll_Ul) C1{ FL:17 FL:17 FL}



static void Test_BFu17ll_BFu17ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu17ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Ul, BFu17ll_BFu17ll_Ul)
//============================================================================


struct  BFu17ll_BFu17ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu17ll_Us) C1{ FL:17 FL:17 Fs}



static void Test_BFu17ll_BFu17ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Us");
    static STRUCT_IF_C BFu17ll_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Us");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Us, BFu17ll_BFu17ll_Us)
//============================================================================


struct  BFu17ll_BFu17ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu17ll_BFu17ll_Vp) C1{ FL:17 FL:17 Fp}



static void Test_BFu17ll_BFu17ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu17ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu17ll_Vp, BFu17ll_BFu17ll_Vp)
//============================================================================


struct  BFu17ll_BFu1c  {
  __tsu64 v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu17ll_BFu1c) C1{ FL:17 Fc:1}



static void Test_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c, BFu17ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu1c_BFu15i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu1c_BFu15i) C1{ FL:17 Fc:1 Fi:15}



static void Test_BFu17ll_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu15i, BFu17ll_BFu1c_BFu15i)
//============================================================================


struct  BFu17ll_BFu1c_BFu15ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu1c_BFu15ll) C1{ FL:17 Fc:1 FL:15}



static void Test_BFu17ll_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu15ll, BFu17ll_BFu1c_BFu15ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu15s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu1c_BFu15s) C1{ FL:17 Fc:1 Fs:15}



static void Test_BFu17ll_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu15s, BFu17ll_BFu1c_BFu15s)
//============================================================================


struct  BFu17ll_BFu1c_BFu16i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu1c_BFu16i) C1{ FL:17 Fc:1 Fi:16}



static void Test_BFu17ll_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu16i, BFu17ll_BFu1c_BFu16i)
//============================================================================


struct  BFu17ll_BFu1c_BFu16ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu1c_BFu16ll) C1{ FL:17 Fc:1 FL:16}



static void Test_BFu17ll_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu16ll, BFu17ll_BFu1c_BFu16ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu16s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu1c_BFu16s) C1{ FL:17 Fc:1 Fs:16}



static void Test_BFu17ll_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu16s, BFu17ll_BFu1c_BFu16s)
//============================================================================


struct  BFu17ll_BFu1c_BFu17i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu1c_BFu17i) C1{ FL:17 Fc:1 Fi:17}



static void Test_BFu17ll_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu17i, BFu17ll_BFu1c_BFu17i)
//============================================================================


struct  BFu17ll_BFu1c_BFu17ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu1c_BFu17ll) C1{ FL:17 Fc:1 FL:17}



static void Test_BFu17ll_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu17ll, BFu17ll_BFu1c_BFu17ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu1c  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu1c_BFu1c) C1{ FL:17 Fc:1 Fc:1}



static void Test_BFu17ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu1c, BFu17ll_BFu1c_BFu1c)
//============================================================================


struct  BFu17ll_BFu1c_BFu1i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu1c_BFu1i) C1{ FL:17 Fc:1 Fi:1}



static void Test_BFu17ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu1i, BFu17ll_BFu1c_BFu1i)
//============================================================================


struct  BFu17ll_BFu1c_BFu1ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu1c_BFu1ll) C1{ FL:17 Fc:1 FL:1}



static void Test_BFu17ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu1ll, BFu17ll_BFu1c_BFu1ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu1s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu1c_BFu1s) C1{ FL:17 Fc:1 Fs:1}



static void Test_BFu17ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu1s, BFu17ll_BFu1c_BFu1s)
//============================================================================


struct  BFu17ll_BFu1c_BFu31i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu1c_BFu31i) C1{ FL:17 Fc:1 Fi:31}



static void Test_BFu17ll_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu31i, BFu17ll_BFu1c_BFu31i)
//============================================================================


struct  BFu17ll_BFu1c_BFu31ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu1c_BFu31ll) C1{ FL:17 Fc:1 FL:31}



static void Test_BFu17ll_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17ll_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu31ll, BFu17ll_BFu1c_BFu31ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu32i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu1c_BFu32i) C1{ FL:17 Fc:1 Fi:32}



static void Test_BFu17ll_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu32i, BFu17ll_BFu1c_BFu32i)
//============================================================================


struct  BFu17ll_BFu1c_BFu32ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu1c_BFu32ll) C1{ FL:17 Fc:1 FL:32}



static void Test_BFu17ll_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17ll_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu32ll, BFu17ll_BFu1c_BFu32ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu33  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu1c_BFu33) C1{ FL:17 Fc:1 FL:33}



static void Test_BFu17ll_BFu1c_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu33");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17ll_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu33, BFu17ll_BFu1c_BFu33)
//============================================================================


struct  BFu17ll_BFu1c_BFu7c  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu1c_BFu7c) C1{ FL:17 Fc:1 Fc:7}



static void Test_BFu17ll_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu7c, BFu17ll_BFu1c_BFu7c)
//============================================================================


struct  BFu17ll_BFu1c_BFu7i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu1c_BFu7i) C1{ FL:17 Fc:1 Fi:7}



static void Test_BFu17ll_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu7i, BFu17ll_BFu1c_BFu7i)
//============================================================================


struct  BFu17ll_BFu1c_BFu7ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu1c_BFu7ll) C1{ FL:17 Fc:1 FL:7}



static void Test_BFu17ll_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu7ll, BFu17ll_BFu1c_BFu7ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu7s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu1c_BFu7s) C1{ FL:17 Fc:1 Fs:7}



static void Test_BFu17ll_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu7s, BFu17ll_BFu1c_BFu7s)
//============================================================================


struct  BFu17ll_BFu1c_BFu8c  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu1c_BFu8c) C1{ FL:17 Fc:1 Fc:8}



static void Test_BFu17ll_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu8c, BFu17ll_BFu1c_BFu8c)
//============================================================================


struct  BFu17ll_BFu1c_BFu8i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu1c_BFu8i) C1{ FL:17 Fc:1 Fi:8}



static void Test_BFu17ll_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu8i, BFu17ll_BFu1c_BFu8i)
//============================================================================


struct  BFu17ll_BFu1c_BFu8ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu1c_BFu8ll) C1{ FL:17 Fc:1 FL:8}



static void Test_BFu17ll_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu8ll, BFu17ll_BFu1c_BFu8ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu8s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu1c_BFu8s) C1{ FL:17 Fc:1 Fs:8}



static void Test_BFu17ll_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu8s, BFu17ll_BFu1c_BFu8s)
//============================================================================


struct  BFu17ll_BFu1c_BFu9i  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu1c_BFu9i) C1{ FL:17 Fc:1 Fi:9}



static void Test_BFu17ll_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu9i, BFu17ll_BFu1c_BFu9i)
//============================================================================


struct  BFu17ll_BFu1c_BFu9ll  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu1c_BFu9ll) C1{ FL:17 Fc:1 FL:9}



static void Test_BFu17ll_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu9ll, BFu17ll_BFu1c_BFu9ll)
//============================================================================


struct  BFu17ll_BFu1c_BFu9s  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu1c_BFu9s) C1{ FL:17 Fc:1 Fs:9}



static void Test_BFu17ll_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu1c_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu1c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_BFu9s, BFu17ll_BFu1c_BFu9s)
//============================================================================


struct  BFu17ll_BFu1c_C  {
  __tsu64 v1:17;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu17ll_BFu1c_C) C1{ FL:17 Fc:1 Fc}



static void Test_BFu17ll_BFu1c_C()
{
  {
    init_simple_test("BFu17ll_BFu1c_C");
    static STRUCT_IF_C BFu17ll_BFu1c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_C, BFu17ll_BFu1c_C)
//============================================================================


struct  BFu17ll_BFu1c_D  {
  __tsu64 v1:17;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu17ll_BFu1c_D) C1{ FL:17 Fc:1 FL}



static void Test_BFu17ll_BFu1c_D()
{
  {
    init_simple_test("BFu17ll_BFu1c_D");
    static STRUCT_IF_C BFu17ll_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_D, BFu17ll_BFu1c_D)
//============================================================================


struct  BFu17ll_BFu1c_F  {
  __tsu64 v1:17;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu17ll_BFu1c_F) C1{ FL:17 Fc:1 Fi}



static void Test_BFu17ll_BFu1c_F()
{
  {
    init_simple_test("BFu17ll_BFu1c_F");
    static STRUCT_IF_C BFu17ll_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_F, BFu17ll_BFu1c_F)
//============================================================================


struct  BFu17ll_BFu1c_I  {
  __tsu64 v1:17;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu17ll_BFu1c_I) C1{ FL:17 Fc:1 Fi}



static void Test_BFu17ll_BFu1c_I()
{
  {
    init_simple_test("BFu17ll_BFu1c_I");
    static STRUCT_IF_C BFu17ll_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_I, BFu17ll_BFu1c_I)
//============================================================================


struct  BFu17ll_BFu1c_Ip  {
  __tsu64 v1:17;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu17ll_BFu1c_Ip) C1{ FL:17 Fc:1 Fp}



static void Test_BFu17ll_BFu1c_Ip()
{
  {
    init_simple_test("BFu17ll_BFu1c_Ip");
    static STRUCT_IF_C BFu17ll_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Ip, BFu17ll_BFu1c_Ip)
//============================================================================


struct  BFu17ll_BFu1c_L  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu1c_L) C1{ FL:17 Fc:1 FL}



static void Test_BFu17ll_BFu1c_L()
{
  {
    init_simple_test("BFu17ll_BFu1c_L");
    static STRUCT_IF_C BFu17ll_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_L, BFu17ll_BFu1c_L)
//============================================================================


struct  BFu17ll_BFu1c_S  {
  __tsu64 v1:17;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu17ll_BFu1c_S) C1{ FL:17 Fc:1 Fs}



static void Test_BFu17ll_BFu1c_S()
{
  {
    init_simple_test("BFu17ll_BFu1c_S");
    static STRUCT_IF_C BFu17ll_BFu1c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_S, BFu17ll_BFu1c_S)
//============================================================================


struct  BFu17ll_BFu1c_Uc  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu1c_Uc) C1{ FL:17 Fc:1 Fc}



static void Test_BFu17ll_BFu1c_Uc()
{
  {
    init_simple_test("BFu17ll_BFu1c_Uc");
    static STRUCT_IF_C BFu17ll_BFu1c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Uc, BFu17ll_BFu1c_Uc)
//============================================================================


struct  BFu17ll_BFu1c_Ui  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu1c_Ui) C1{ FL:17 Fc:1 Fi}



static void Test_BFu17ll_BFu1c_Ui()
{
  {
    init_simple_test("BFu17ll_BFu1c_Ui");
    static STRUCT_IF_C BFu17ll_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Ui, BFu17ll_BFu1c_Ui)
//============================================================================


struct  BFu17ll_BFu1c_Ul  {
  __tsu64 v1:17;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu1c_Ul) C1{ FL:17 Fc:1 FL}



static void Test_BFu17ll_BFu1c_Ul()
{
  {
    init_simple_test("BFu17ll_BFu1c_Ul");
    static STRUCT_IF_C BFu17ll_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Ul, BFu17ll_BFu1c_Ul)
//============================================================================


struct  BFu17ll_BFu1c_Us  {
  __tsu64 v1:17;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu1c_Us) C1{ FL:17 Fc:1 Fs}



static void Test_BFu17ll_BFu1c_Us()
{
  {
    init_simple_test("BFu17ll_BFu1c_Us");
    static STRUCT_IF_C BFu17ll_BFu1c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Us, BFu17ll_BFu1c_Us)
//============================================================================


struct  BFu17ll_BFu1c_Vp  {
  __tsu64 v1:17;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu17ll_BFu1c_Vp) C1{ FL:17 Fc:1 Fp}



static void Test_BFu17ll_BFu1c_Vp()
{
  {
    init_simple_test("BFu17ll_BFu1c_Vp");
    static STRUCT_IF_C BFu17ll_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1c_Vp, BFu17ll_BFu1c_Vp)
//============================================================================


struct  BFu17ll_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu17ll_BFu1i) C1{ FL:17 Fi:1}



static void Test_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i, BFu17ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu1i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu1i_BFu15i) C1{ FL:17 Fi:1 Fi:15}



static void Test_BFu17ll_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu15i, BFu17ll_BFu1i_BFu15i)
//============================================================================


struct  BFu17ll_BFu1i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu1i_BFu15ll) C1{ FL:17 Fi:1 FL:15}



static void Test_BFu17ll_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu15ll, BFu17ll_BFu1i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu1i_BFu15s) C1{ FL:17 Fi:1 Fs:15}



static void Test_BFu17ll_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu15s, BFu17ll_BFu1i_BFu15s)
//============================================================================


struct  BFu17ll_BFu1i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu1i_BFu16i) C1{ FL:17 Fi:1 Fi:16}



static void Test_BFu17ll_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu16i, BFu17ll_BFu1i_BFu16i)
//============================================================================


struct  BFu17ll_BFu1i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu1i_BFu16ll) C1{ FL:17 Fi:1 FL:16}



static void Test_BFu17ll_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu16ll, BFu17ll_BFu1i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu1i_BFu16s) C1{ FL:17 Fi:1 Fs:16}



static void Test_BFu17ll_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu16s, BFu17ll_BFu1i_BFu16s)
//============================================================================


struct  BFu17ll_BFu1i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu1i_BFu17i) C1{ FL:17 Fi:1 Fi:17}



static void Test_BFu17ll_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu17i, BFu17ll_BFu1i_BFu17i)
//============================================================================


struct  BFu17ll_BFu1i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu1i_BFu17ll) C1{ FL:17 Fi:1 FL:17}



static void Test_BFu17ll_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu17ll, BFu17ll_BFu1i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu1i_BFu1c) C1{ FL:17 Fi:1 Fc:1}



static void Test_BFu17ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu1c, BFu17ll_BFu1i_BFu1c)
//============================================================================


struct  BFu17ll_BFu1i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu1i_BFu1i) C1{ FL:17 Fi:1 Fi:1}



static void Test_BFu17ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu1i, BFu17ll_BFu1i_BFu1i)
//============================================================================


struct  BFu17ll_BFu1i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu1i_BFu1ll) C1{ FL:17 Fi:1 FL:1}



static void Test_BFu17ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu1ll, BFu17ll_BFu1i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu1i_BFu1s) C1{ FL:17 Fi:1 Fs:1}



static void Test_BFu17ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu1s, BFu17ll_BFu1i_BFu1s)
//============================================================================


struct  BFu17ll_BFu1i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu1i_BFu31i) C1{ FL:17 Fi:1 Fi:31}



static void Test_BFu17ll_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu31i, BFu17ll_BFu1i_BFu31i)
//============================================================================


struct  BFu17ll_BFu1i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu1i_BFu31ll) C1{ FL:17 Fi:1 FL:31}



static void Test_BFu17ll_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17ll_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu31ll, BFu17ll_BFu1i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu1i_BFu32i) C1{ FL:17 Fi:1 Fi:32}



static void Test_BFu17ll_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu32i, BFu17ll_BFu1i_BFu32i)
//============================================================================


struct  BFu17ll_BFu1i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu1i_BFu32ll) C1{ FL:17 Fi:1 FL:32}



static void Test_BFu17ll_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17ll_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu32ll, BFu17ll_BFu1i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu1i_BFu33) C1{ FL:17 Fi:1 FL:33}



static void Test_BFu17ll_BFu1i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17ll_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu33, BFu17ll_BFu1i_BFu33)
//============================================================================


struct  BFu17ll_BFu1i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu1i_BFu7c) C1{ FL:17 Fi:1 Fc:7}



static void Test_BFu17ll_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu7c, BFu17ll_BFu1i_BFu7c)
//============================================================================


struct  BFu17ll_BFu1i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu1i_BFu7i) C1{ FL:17 Fi:1 Fi:7}



static void Test_BFu17ll_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu7i, BFu17ll_BFu1i_BFu7i)
//============================================================================


struct  BFu17ll_BFu1i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu1i_BFu7ll) C1{ FL:17 Fi:1 FL:7}



static void Test_BFu17ll_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu7ll, BFu17ll_BFu1i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu1i_BFu7s) C1{ FL:17 Fi:1 Fs:7}



static void Test_BFu17ll_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu7s, BFu17ll_BFu1i_BFu7s)
//============================================================================


struct  BFu17ll_BFu1i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu1i_BFu8c) C1{ FL:17 Fi:1 Fc:8}



static void Test_BFu17ll_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu8c, BFu17ll_BFu1i_BFu8c)
//============================================================================


struct  BFu17ll_BFu1i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu1i_BFu8i) C1{ FL:17 Fi:1 Fi:8}



static void Test_BFu17ll_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu8i, BFu17ll_BFu1i_BFu8i)
//============================================================================


struct  BFu17ll_BFu1i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu1i_BFu8ll) C1{ FL:17 Fi:1 FL:8}



static void Test_BFu17ll_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu8ll, BFu17ll_BFu1i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu1i_BFu8s) C1{ FL:17 Fi:1 Fs:8}



static void Test_BFu17ll_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu8s, BFu17ll_BFu1i_BFu8s)
//============================================================================


struct  BFu17ll_BFu1i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu1i_BFu9i) C1{ FL:17 Fi:1 Fi:9}



static void Test_BFu17ll_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu9i, BFu17ll_BFu1i_BFu9i)
//============================================================================


struct  BFu17ll_BFu1i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu1i_BFu9ll) C1{ FL:17 Fi:1 FL:9}



static void Test_BFu17ll_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu9ll, BFu17ll_BFu1i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu1i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu1i_BFu9s) C1{ FL:17 Fi:1 Fs:9}



static void Test_BFu17ll_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu1i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu1i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_BFu9s, BFu17ll_BFu1i_BFu9s)
//============================================================================


struct  BFu17ll_BFu1i_C  {
  __tsu64 v1:17;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu17ll_BFu1i_C) C1{ FL:17 Fi:1 Fc}



static void Test_BFu17ll_BFu1i_C()
{
  {
    init_simple_test("BFu17ll_BFu1i_C");
    static STRUCT_IF_C BFu17ll_BFu1i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_C, BFu17ll_BFu1i_C)
//============================================================================


struct  BFu17ll_BFu1i_D  {
  __tsu64 v1:17;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu17ll_BFu1i_D) C1{ FL:17 Fi:1 FL}



static void Test_BFu17ll_BFu1i_D()
{
  {
    init_simple_test("BFu17ll_BFu1i_D");
    static STRUCT_IF_C BFu17ll_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_D, BFu17ll_BFu1i_D)
//============================================================================


struct  BFu17ll_BFu1i_F  {
  __tsu64 v1:17;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu17ll_BFu1i_F) C1{ FL:17 Fi:1 Fi}



static void Test_BFu17ll_BFu1i_F()
{
  {
    init_simple_test("BFu17ll_BFu1i_F");
    static STRUCT_IF_C BFu17ll_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_F, BFu17ll_BFu1i_F)
//============================================================================


struct  BFu17ll_BFu1i_I  {
  __tsu64 v1:17;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu17ll_BFu1i_I) C1{ FL:17 Fi:1 Fi}



static void Test_BFu17ll_BFu1i_I()
{
  {
    init_simple_test("BFu17ll_BFu1i_I");
    static STRUCT_IF_C BFu17ll_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_I, BFu17ll_BFu1i_I)
//============================================================================


struct  BFu17ll_BFu1i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu17ll_BFu1i_Ip) C1{ FL:17 Fi:1 Fp}



static void Test_BFu17ll_BFu1i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu1i_Ip");
    static STRUCT_IF_C BFu17ll_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Ip, BFu17ll_BFu1i_Ip)
//============================================================================


struct  BFu17ll_BFu1i_L  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu1i_L) C1{ FL:17 Fi:1 FL}



static void Test_BFu17ll_BFu1i_L()
{
  {
    init_simple_test("BFu17ll_BFu1i_L");
    static STRUCT_IF_C BFu17ll_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_L, BFu17ll_BFu1i_L)
//============================================================================


struct  BFu17ll_BFu1i_S  {
  __tsu64 v1:17;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu17ll_BFu1i_S) C1{ FL:17 Fi:1 Fs}



static void Test_BFu17ll_BFu1i_S()
{
  {
    init_simple_test("BFu17ll_BFu1i_S");
    static STRUCT_IF_C BFu17ll_BFu1i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_S, BFu17ll_BFu1i_S)
//============================================================================


struct  BFu17ll_BFu1i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu1i_Uc) C1{ FL:17 Fi:1 Fc}



static void Test_BFu17ll_BFu1i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu1i_Uc");
    static STRUCT_IF_C BFu17ll_BFu1i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Uc, BFu17ll_BFu1i_Uc)
//============================================================================


struct  BFu17ll_BFu1i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu1i_Ui) C1{ FL:17 Fi:1 Fi}



static void Test_BFu17ll_BFu1i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu1i_Ui");
    static STRUCT_IF_C BFu17ll_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Ui, BFu17ll_BFu1i_Ui)
//============================================================================


struct  BFu17ll_BFu1i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu1i_Ul) C1{ FL:17 Fi:1 FL}



static void Test_BFu17ll_BFu1i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu1i_Ul");
    static STRUCT_IF_C BFu17ll_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Ul, BFu17ll_BFu1i_Ul)
//============================================================================


struct  BFu17ll_BFu1i_Us  {
  __tsu64 v1:17;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu1i_Us) C1{ FL:17 Fi:1 Fs}



static void Test_BFu17ll_BFu1i_Us()
{
  {
    init_simple_test("BFu17ll_BFu1i_Us");
    static STRUCT_IF_C BFu17ll_BFu1i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Us, BFu17ll_BFu1i_Us)
//============================================================================


struct  BFu17ll_BFu1i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu17ll_BFu1i_Vp) C1{ FL:17 Fi:1 Fp}



static void Test_BFu17ll_BFu1i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu1i_Vp");
    static STRUCT_IF_C BFu17ll_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1i_Vp, BFu17ll_BFu1i_Vp)
//============================================================================


struct  BFu17ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu17ll_BFu1ll) C1{ FL:17 FL:1}



static void Test_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll, BFu17ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu1ll_BFu15i) C1{ FL:17 FL:1 Fi:15}



static void Test_BFu17ll_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu15i, BFu17ll_BFu1ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu1ll_BFu15ll) C1{ FL:17 FL:1 FL:15}



static void Test_BFu17ll_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu15ll, BFu17ll_BFu1ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu1ll_BFu15s) C1{ FL:17 FL:1 Fs:15}



static void Test_BFu17ll_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu15s, BFu17ll_BFu1ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu1ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu1ll_BFu16i) C1{ FL:17 FL:1 Fi:16}



static void Test_BFu17ll_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu16i, BFu17ll_BFu1ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu1ll_BFu16ll) C1{ FL:17 FL:1 FL:16}



static void Test_BFu17ll_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu16ll, BFu17ll_BFu1ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu1ll_BFu16s) C1{ FL:17 FL:1 Fs:16}



static void Test_BFu17ll_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu16s, BFu17ll_BFu1ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu1ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu1ll_BFu17i) C1{ FL:17 FL:1 Fi:17}



static void Test_BFu17ll_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu17i, BFu17ll_BFu1ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu1ll_BFu17ll) C1{ FL:17 FL:1 FL:17}



static void Test_BFu17ll_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu17ll, BFu17ll_BFu1ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu1ll_BFu1c) C1{ FL:17 FL:1 Fc:1}



static void Test_BFu17ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu1c, BFu17ll_BFu1ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu1ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu1ll_BFu1i) C1{ FL:17 FL:1 Fi:1}



static void Test_BFu17ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu1i, BFu17ll_BFu1ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu1ll_BFu1ll) C1{ FL:17 FL:1 FL:1}



static void Test_BFu17ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu1ll, BFu17ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu1ll_BFu1s) C1{ FL:17 FL:1 Fs:1}



static void Test_BFu17ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu1s, BFu17ll_BFu1ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu1ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu1ll_BFu31i) C1{ FL:17 FL:1 Fi:31}



static void Test_BFu17ll_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu31i, BFu17ll_BFu1ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu1ll_BFu31ll) C1{ FL:17 FL:1 FL:31}



static void Test_BFu17ll_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17ll_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu31ll, BFu17ll_BFu1ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu1ll_BFu32i) C1{ FL:17 FL:1 Fi:32}



static void Test_BFu17ll_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu32i, BFu17ll_BFu1ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu1ll_BFu32ll) C1{ FL:17 FL:1 FL:32}



static void Test_BFu17ll_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17ll_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu32ll, BFu17ll_BFu1ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu1ll_BFu33) C1{ FL:17 FL:1 FL:33}



static void Test_BFu17ll_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17ll_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu33, BFu17ll_BFu1ll_BFu33)
//============================================================================


struct  BFu17ll_BFu1ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu1ll_BFu7c) C1{ FL:17 FL:1 Fc:7}



static void Test_BFu17ll_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu7c, BFu17ll_BFu1ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu1ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu1ll_BFu7i) C1{ FL:17 FL:1 Fi:7}



static void Test_BFu17ll_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu7i, BFu17ll_BFu1ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu1ll_BFu7ll) C1{ FL:17 FL:1 FL:7}



static void Test_BFu17ll_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu7ll, BFu17ll_BFu1ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu1ll_BFu7s) C1{ FL:17 FL:1 Fs:7}



static void Test_BFu17ll_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu7s, BFu17ll_BFu1ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu1ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu1ll_BFu8c) C1{ FL:17 FL:1 Fc:8}



static void Test_BFu17ll_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu8c, BFu17ll_BFu1ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu1ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu1ll_BFu8i) C1{ FL:17 FL:1 Fi:8}



static void Test_BFu17ll_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu8i, BFu17ll_BFu1ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu1ll_BFu8ll) C1{ FL:17 FL:1 FL:8}



static void Test_BFu17ll_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu8ll, BFu17ll_BFu1ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu1ll_BFu8s) C1{ FL:17 FL:1 Fs:8}



static void Test_BFu17ll_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu8s, BFu17ll_BFu1ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu1ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu1ll_BFu9i) C1{ FL:17 FL:1 Fi:9}



static void Test_BFu17ll_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu9i, BFu17ll_BFu1ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu1ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu1ll_BFu9ll) C1{ FL:17 FL:1 FL:9}



static void Test_BFu17ll_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu9ll, BFu17ll_BFu1ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu1ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu1ll_BFu9s) C1{ FL:17 FL:1 Fs:9}



static void Test_BFu17ll_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_BFu9s, BFu17ll_BFu1ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu1ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu17ll_BFu1ll_C) C1{ FL:17 FL:1 Fc}



static void Test_BFu17ll_BFu1ll_C()
{
  {
    init_simple_test("BFu17ll_BFu1ll_C");
    static STRUCT_IF_C BFu17ll_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_C, BFu17ll_BFu1ll_C)
//============================================================================


struct  BFu17ll_BFu1ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu17ll_BFu1ll_D) C1{ FL:17 FL:1 FL}



static void Test_BFu17ll_BFu1ll_D()
{
  {
    init_simple_test("BFu17ll_BFu1ll_D");
    static STRUCT_IF_C BFu17ll_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_D, BFu17ll_BFu1ll_D)
//============================================================================


struct  BFu17ll_BFu1ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu17ll_BFu1ll_F) C1{ FL:17 FL:1 Fi}



static void Test_BFu17ll_BFu1ll_F()
{
  {
    init_simple_test("BFu17ll_BFu1ll_F");
    static STRUCT_IF_C BFu17ll_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_F, BFu17ll_BFu1ll_F)
//============================================================================


struct  BFu17ll_BFu1ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu17ll_BFu1ll_I) C1{ FL:17 FL:1 Fi}



static void Test_BFu17ll_BFu1ll_I()
{
  {
    init_simple_test("BFu17ll_BFu1ll_I");
    static STRUCT_IF_C BFu17ll_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_I, BFu17ll_BFu1ll_I)
//============================================================================


struct  BFu17ll_BFu1ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu17ll_BFu1ll_Ip) C1{ FL:17 FL:1 Fp}



static void Test_BFu17ll_BFu1ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Ip, BFu17ll_BFu1ll_Ip)
//============================================================================


struct  BFu17ll_BFu1ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu1ll_L) C1{ FL:17 FL:1 FL}



static void Test_BFu17ll_BFu1ll_L()
{
  {
    init_simple_test("BFu17ll_BFu1ll_L");
    static STRUCT_IF_C BFu17ll_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_L, BFu17ll_BFu1ll_L)
//============================================================================


struct  BFu17ll_BFu1ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu17ll_BFu1ll_S) C1{ FL:17 FL:1 Fs}



static void Test_BFu17ll_BFu1ll_S()
{
  {
    init_simple_test("BFu17ll_BFu1ll_S");
    static STRUCT_IF_C BFu17ll_BFu1ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_S, BFu17ll_BFu1ll_S)
//============================================================================


struct  BFu17ll_BFu1ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu1ll_Uc) C1{ FL:17 FL:1 Fc}



static void Test_BFu17ll_BFu1ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Uc, BFu17ll_BFu1ll_Uc)
//============================================================================


struct  BFu17ll_BFu1ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu1ll_Ui) C1{ FL:17 FL:1 Fi}



static void Test_BFu17ll_BFu1ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Ui, BFu17ll_BFu1ll_Ui)
//============================================================================


struct  BFu17ll_BFu1ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu1ll_Ul) C1{ FL:17 FL:1 FL}



static void Test_BFu17ll_BFu1ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Ul, BFu17ll_BFu1ll_Ul)
//============================================================================


struct  BFu17ll_BFu1ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu1ll_Us) C1{ FL:17 FL:1 Fs}



static void Test_BFu17ll_BFu1ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Us");
    static STRUCT_IF_C BFu17ll_BFu1ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Us, BFu17ll_BFu1ll_Us)
//============================================================================


struct  BFu17ll_BFu1ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu17ll_BFu1ll_Vp) C1{ FL:17 FL:1 Fp}



static void Test_BFu17ll_BFu1ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu1ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1ll_Vp, BFu17ll_BFu1ll_Vp)
//============================================================================


struct  BFu17ll_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu17ll_BFu1s) C1{ FL:17 Fs:1}



static void Test_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s, BFu17ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu1s_BFu15i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu1s_BFu15i) C1{ FL:17 Fs:1 Fi:15}



static void Test_BFu17ll_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu15i, BFu17ll_BFu1s_BFu15i)
//============================================================================


struct  BFu17ll_BFu1s_BFu15ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu1s_BFu15ll) C1{ FL:17 Fs:1 FL:15}



static void Test_BFu17ll_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu17ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu17ll_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu15ll, BFu17ll_BFu1s_BFu15ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu1s_BFu15s) C1{ FL:17 Fs:1 Fs:15}



static void Test_BFu17ll_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu15s, BFu17ll_BFu1s_BFu15s)
//============================================================================


struct  BFu17ll_BFu1s_BFu16i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu1s_BFu16i) C1{ FL:17 Fs:1 Fi:16}



static void Test_BFu17ll_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu16i, BFu17ll_BFu1s_BFu16i)
//============================================================================


struct  BFu17ll_BFu1s_BFu16ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu1s_BFu16ll) C1{ FL:17 Fs:1 FL:16}



static void Test_BFu17ll_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu17ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu17ll_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu16ll, BFu17ll_BFu1s_BFu16ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu1s_BFu16s) C1{ FL:17 Fs:1 Fs:16}



static void Test_BFu17ll_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu16s, BFu17ll_BFu1s_BFu16s)
//============================================================================


struct  BFu17ll_BFu1s_BFu17i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu1s_BFu17i) C1{ FL:17 Fs:1 Fi:17}



static void Test_BFu17ll_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu17i, BFu17ll_BFu1s_BFu17i)
//============================================================================


struct  BFu17ll_BFu1s_BFu17ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu1s_BFu17ll) C1{ FL:17 Fs:1 FL:17}



static void Test_BFu17ll_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu17ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu17ll, BFu17ll_BFu1s_BFu17ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu1c  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu1s_BFu1c) C1{ FL:17 Fs:1 Fc:1}



static void Test_BFu17ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu1c, BFu17ll_BFu1s_BFu1c)
//============================================================================


struct  BFu17ll_BFu1s_BFu1i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu1s_BFu1i) C1{ FL:17 Fs:1 Fi:1}



static void Test_BFu17ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu1i, BFu17ll_BFu1s_BFu1i)
//============================================================================


struct  BFu17ll_BFu1s_BFu1ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu1s_BFu1ll) C1{ FL:17 Fs:1 FL:1}



static void Test_BFu17ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu1ll, BFu17ll_BFu1s_BFu1ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu1s_BFu1s) C1{ FL:17 Fs:1 Fs:1}



static void Test_BFu17ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu17ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu1s, BFu17ll_BFu1s_BFu1s)
//============================================================================


struct  BFu17ll_BFu1s_BFu31i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu1s_BFu31i) C1{ FL:17 Fs:1 Fi:31}



static void Test_BFu17ll_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu31i, BFu17ll_BFu1s_BFu31i)
//============================================================================


struct  BFu17ll_BFu1s_BFu31ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu1s_BFu31ll) C1{ FL:17 Fs:1 FL:31}



static void Test_BFu17ll_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu17ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu17ll_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu31ll, BFu17ll_BFu1s_BFu31ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu32i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu1s_BFu32i) C1{ FL:17 Fs:1 Fi:32}



static void Test_BFu17ll_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu32i, BFu17ll_BFu1s_BFu32i)
//============================================================================


struct  BFu17ll_BFu1s_BFu32ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu1s_BFu32ll) C1{ FL:17 Fs:1 FL:32}



static void Test_BFu17ll_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu17ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu17ll_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu32ll, BFu17ll_BFu1s_BFu32ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu33  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu1s_BFu33) C1{ FL:17 Fs:1 FL:33}



static void Test_BFu17ll_BFu1s_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu33");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu17ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu17ll_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu33, BFu17ll_BFu1s_BFu33)
//============================================================================


struct  BFu17ll_BFu1s_BFu7c  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu1s_BFu7c) C1{ FL:17 Fs:1 Fc:7}



static void Test_BFu17ll_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu7c, BFu17ll_BFu1s_BFu7c)
//============================================================================


struct  BFu17ll_BFu1s_BFu7i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu1s_BFu7i) C1{ FL:17 Fs:1 Fi:7}



static void Test_BFu17ll_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu7i, BFu17ll_BFu1s_BFu7i)
//============================================================================


struct  BFu17ll_BFu1s_BFu7ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu1s_BFu7ll) C1{ FL:17 Fs:1 FL:7}



static void Test_BFu17ll_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu7ll, BFu17ll_BFu1s_BFu7ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu7s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu1s_BFu7s) C1{ FL:17 Fs:1 Fs:7}



static void Test_BFu17ll_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu17ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu7s, BFu17ll_BFu1s_BFu7s)
//============================================================================


struct  BFu17ll_BFu1s_BFu8c  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu1s_BFu8c) C1{ FL:17 Fs:1 Fc:8}



static void Test_BFu17ll_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu8c, BFu17ll_BFu1s_BFu8c)
//============================================================================


struct  BFu17ll_BFu1s_BFu8i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu1s_BFu8i) C1{ FL:17 Fs:1 Fi:8}



static void Test_BFu17ll_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu8i, BFu17ll_BFu1s_BFu8i)
//============================================================================


struct  BFu17ll_BFu1s_BFu8ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu1s_BFu8ll) C1{ FL:17 Fs:1 FL:8}



static void Test_BFu17ll_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu8ll, BFu17ll_BFu1s_BFu8ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu8s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu1s_BFu8s) C1{ FL:17 Fs:1 Fs:8}



static void Test_BFu17ll_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu17ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu8s, BFu17ll_BFu1s_BFu8s)
//============================================================================


struct  BFu17ll_BFu1s_BFu9i  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu1s_BFu9i) C1{ FL:17 Fs:1 Fi:9}



static void Test_BFu17ll_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu9i, BFu17ll_BFu1s_BFu9i)
//============================================================================


struct  BFu17ll_BFu1s_BFu9ll  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu1s_BFu9ll) C1{ FL:17 Fs:1 FL:9}



static void Test_BFu17ll_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu9ll, BFu17ll_BFu1s_BFu9ll)
//============================================================================


struct  BFu17ll_BFu1s_BFu9s  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu1s_BFu9s) C1{ FL:17 Fs:1 Fs:9}



static void Test_BFu17ll_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu1s_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu1s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu17ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_BFu9s, BFu17ll_BFu1s_BFu9s)
//============================================================================


struct  BFu17ll_BFu1s_C  {
  __tsu64 v1:17;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu17ll_BFu1s_C) C1{ FL:17 Fs:1 Fc}



static void Test_BFu17ll_BFu1s_C()
{
  {
    init_simple_test("BFu17ll_BFu1s_C");
    static STRUCT_IF_C BFu17ll_BFu1s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_C");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_C, BFu17ll_BFu1s_C)
//============================================================================


struct  BFu17ll_BFu1s_D  {
  __tsu64 v1:17;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu17ll_BFu1s_D) C1{ FL:17 Fs:1 FL}



static void Test_BFu17ll_BFu1s_D()
{
  {
    init_simple_test("BFu17ll_BFu1s_D");
    static STRUCT_IF_C BFu17ll_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_D");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_D, BFu17ll_BFu1s_D)
//============================================================================


struct  BFu17ll_BFu1s_F  {
  __tsu64 v1:17;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu17ll_BFu1s_F) C1{ FL:17 Fs:1 Fi}



static void Test_BFu17ll_BFu1s_F()
{
  {
    init_simple_test("BFu17ll_BFu1s_F");
    static STRUCT_IF_C BFu17ll_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_F");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_F, BFu17ll_BFu1s_F)
//============================================================================


struct  BFu17ll_BFu1s_I  {
  __tsu64 v1:17;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu17ll_BFu1s_I) C1{ FL:17 Fs:1 Fi}



static void Test_BFu17ll_BFu1s_I()
{
  {
    init_simple_test("BFu17ll_BFu1s_I");
    static STRUCT_IF_C BFu17ll_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_I");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_I, BFu17ll_BFu1s_I)
//============================================================================


struct  BFu17ll_BFu1s_Ip  {
  __tsu64 v1:17;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu17ll_BFu1s_Ip) C1{ FL:17 Fs:1 Fp}



static void Test_BFu17ll_BFu1s_Ip()
{
  {
    init_simple_test("BFu17ll_BFu1s_Ip");
    static STRUCT_IF_C BFu17ll_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Ip, BFu17ll_BFu1s_Ip)
//============================================================================


struct  BFu17ll_BFu1s_L  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu1s_L) C1{ FL:17 Fs:1 FL}



static void Test_BFu17ll_BFu1s_L()
{
  {
    init_simple_test("BFu17ll_BFu1s_L");
    static STRUCT_IF_C BFu17ll_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_L");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_L, BFu17ll_BFu1s_L)
//============================================================================


struct  BFu17ll_BFu1s_S  {
  __tsu64 v1:17;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu17ll_BFu1s_S) C1{ FL:17 Fs:1 Fs}



static void Test_BFu17ll_BFu1s_S()
{
  {
    init_simple_test("BFu17ll_BFu1s_S");
    static STRUCT_IF_C BFu17ll_BFu1s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_S");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_S, BFu17ll_BFu1s_S)
//============================================================================


struct  BFu17ll_BFu1s_Uc  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu1s_Uc) C1{ FL:17 Fs:1 Fc}



static void Test_BFu17ll_BFu1s_Uc()
{
  {
    init_simple_test("BFu17ll_BFu1s_Uc");
    static STRUCT_IF_C BFu17ll_BFu1s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Uc, BFu17ll_BFu1s_Uc)
//============================================================================


struct  BFu17ll_BFu1s_Ui  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu1s_Ui) C1{ FL:17 Fs:1 Fi}



static void Test_BFu17ll_BFu1s_Ui()
{
  {
    init_simple_test("BFu17ll_BFu1s_Ui");
    static STRUCT_IF_C BFu17ll_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Ui, BFu17ll_BFu1s_Ui)
//============================================================================


struct  BFu17ll_BFu1s_Ul  {
  __tsu64 v1:17;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu1s_Ul) C1{ FL:17 Fs:1 FL}



static void Test_BFu17ll_BFu1s_Ul()
{
  {
    init_simple_test("BFu17ll_BFu1s_Ul");
    static STRUCT_IF_C BFu17ll_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Ul, BFu17ll_BFu1s_Ul)
//============================================================================


struct  BFu17ll_BFu1s_Us  {
  __tsu64 v1:17;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu1s_Us) C1{ FL:17 Fs:1 Fs}



static void Test_BFu17ll_BFu1s_Us()
{
  {
    init_simple_test("BFu17ll_BFu1s_Us");
    static STRUCT_IF_C BFu17ll_BFu1s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu1s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Us");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Us, BFu17ll_BFu1s_Us)
//============================================================================


struct  BFu17ll_BFu1s_Vp  {
  __tsu64 v1:17;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu17ll_BFu1s_Vp) C1{ FL:17 Fs:1 Fp}



static void Test_BFu17ll_BFu1s_Vp()
{
  {
    init_simple_test("BFu17ll_BFu1s_Vp");
    static STRUCT_IF_C BFu17ll_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu1s_Vp, BFu17ll_BFu1s_Vp)
//============================================================================


struct  BFu17ll_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu17ll_BFu31i) C1{ FL:17 Fi:31}



static void Test_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i, BFu17ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu31i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu31i_BFu15i) C1{ FL:17 Fi:31 Fi:15}



static void Test_BFu17ll_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu15i, BFu17ll_BFu31i_BFu15i)
//============================================================================


struct  BFu17ll_BFu31i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu31i_BFu15ll) C1{ FL:17 Fi:31 FL:15}



static void Test_BFu17ll_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu17ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu17ll_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu15ll, BFu17ll_BFu31i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu31i_BFu15s) C1{ FL:17 Fi:31 Fs:15}



static void Test_BFu17ll_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu15s, BFu17ll_BFu31i_BFu15s)
//============================================================================


struct  BFu17ll_BFu31i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu31i_BFu16i) C1{ FL:17 Fi:31 Fi:16}



static void Test_BFu17ll_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu16i, BFu17ll_BFu31i_BFu16i)
//============================================================================


struct  BFu17ll_BFu31i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu31i_BFu16ll) C1{ FL:17 Fi:31 FL:16}



static void Test_BFu17ll_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu17ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu17ll_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu16ll, BFu17ll_BFu31i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu31i_BFu16s) C1{ FL:17 Fi:31 Fs:16}



static void Test_BFu17ll_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu16s, BFu17ll_BFu31i_BFu16s)
//============================================================================


struct  BFu17ll_BFu31i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu31i_BFu17i) C1{ FL:17 Fi:31 Fi:17}



static void Test_BFu17ll_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu17i, BFu17ll_BFu31i_BFu17i)
//============================================================================


struct  BFu17ll_BFu31i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu31i_BFu17ll) C1{ FL:17 Fi:31 FL:17}



static void Test_BFu17ll_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu17ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu17ll, BFu17ll_BFu31i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu31i_BFu1c) C1{ FL:17 Fi:31 Fc:1}



static void Test_BFu17ll_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17ll_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu1c, BFu17ll_BFu31i_BFu1c)
//============================================================================


struct  BFu17ll_BFu31i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu31i_BFu1i) C1{ FL:17 Fi:31 Fi:1}



static void Test_BFu17ll_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17ll_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu1i, BFu17ll_BFu31i_BFu1i)
//============================================================================


struct  BFu17ll_BFu31i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu31i_BFu1ll) C1{ FL:17 Fi:31 FL:1}



static void Test_BFu17ll_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17ll_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu1ll, BFu17ll_BFu31i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu31i_BFu1s) C1{ FL:17 Fi:31 Fs:1}



static void Test_BFu17ll_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu17ll_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu1s, BFu17ll_BFu31i_BFu1s)
//============================================================================


struct  BFu17ll_BFu31i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu31i_BFu31i) C1{ FL:17 Fi:31 Fi:31}



static void Test_BFu17ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu31i, BFu17ll_BFu31i_BFu31i)
//============================================================================


struct  BFu17ll_BFu31i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu31i_BFu31ll) C1{ FL:17 Fi:31 FL:31}



static void Test_BFu17ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu17ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu31ll, BFu17ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu31i_BFu32i) C1{ FL:17 Fi:31 Fi:32}



static void Test_BFu17ll_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu32i, BFu17ll_BFu31i_BFu32i)
//============================================================================


struct  BFu17ll_BFu31i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu31i_BFu32ll) C1{ FL:17 Fi:31 FL:32}



static void Test_BFu17ll_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu17ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu17ll_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu32ll, BFu17ll_BFu31i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu31i_BFu33) C1{ FL:17 Fi:31 FL:33}



static void Test_BFu17ll_BFu31i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu17ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu17ll_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu33, BFu17ll_BFu31i_BFu33)
//============================================================================


struct  BFu17ll_BFu31i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu31i_BFu7c) C1{ FL:17 Fi:31 Fc:7}



static void Test_BFu17ll_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu7c, BFu17ll_BFu31i_BFu7c)
//============================================================================


struct  BFu17ll_BFu31i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu31i_BFu7i) C1{ FL:17 Fi:31 Fi:7}



static void Test_BFu17ll_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu7i, BFu17ll_BFu31i_BFu7i)
//============================================================================


struct  BFu17ll_BFu31i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu31i_BFu7ll) C1{ FL:17 Fi:31 FL:7}



static void Test_BFu17ll_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu17ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu17ll_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu7ll, BFu17ll_BFu31i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu31i_BFu7s) C1{ FL:17 Fi:31 Fs:7}



static void Test_BFu17ll_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu7s, BFu17ll_BFu31i_BFu7s)
//============================================================================


struct  BFu17ll_BFu31i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu31i_BFu8c) C1{ FL:17 Fi:31 Fc:8}



static void Test_BFu17ll_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu8c, BFu17ll_BFu31i_BFu8c)
//============================================================================


struct  BFu17ll_BFu31i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu31i_BFu8i) C1{ FL:17 Fi:31 Fi:8}



static void Test_BFu17ll_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu8i, BFu17ll_BFu31i_BFu8i)
//============================================================================


struct  BFu17ll_BFu31i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu31i_BFu8ll) C1{ FL:17 Fi:31 FL:8}



static void Test_BFu17ll_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu17ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu17ll_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu8ll, BFu17ll_BFu31i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu31i_BFu8s) C1{ FL:17 Fi:31 Fs:8}



static void Test_BFu17ll_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu8s, BFu17ll_BFu31i_BFu8s)
//============================================================================


struct  BFu17ll_BFu31i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu31i_BFu9i) C1{ FL:17 Fi:31 Fi:9}



static void Test_BFu17ll_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu9i, BFu17ll_BFu31i_BFu9i)
//============================================================================


struct  BFu17ll_BFu31i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu31i_BFu9ll) C1{ FL:17 Fi:31 FL:9}



static void Test_BFu17ll_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu17ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu17ll_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu9ll, BFu17ll_BFu31i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu31i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu31i_BFu9s) C1{ FL:17 Fi:31 Fs:9}



static void Test_BFu17ll_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu31i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu31i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_BFu9s, BFu17ll_BFu31i_BFu9s)
//============================================================================


struct  BFu17ll_BFu31i_C  {
  __tsu64 v1:17;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu17ll_BFu31i_C) C1{ FL:17 Fi:31 Fc}



static void Test_BFu17ll_BFu31i_C()
{
  {
    init_simple_test("BFu17ll_BFu31i_C");
    static STRUCT_IF_C BFu17ll_BFu31i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_C, BFu17ll_BFu31i_C)
//============================================================================


struct  BFu17ll_BFu31i_D  {
  __tsu64 v1:17;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu17ll_BFu31i_D) C1{ FL:17 Fi:31 FL}



static void Test_BFu17ll_BFu31i_D()
{
  {
    init_simple_test("BFu17ll_BFu31i_D");
    static STRUCT_IF_C BFu17ll_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_D, BFu17ll_BFu31i_D)
//============================================================================


struct  BFu17ll_BFu31i_F  {
  __tsu64 v1:17;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu17ll_BFu31i_F) C1{ FL:17 Fi:31 Fi}



static void Test_BFu17ll_BFu31i_F()
{
  {
    init_simple_test("BFu17ll_BFu31i_F");
    static STRUCT_IF_C BFu17ll_BFu31i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_F, BFu17ll_BFu31i_F)
//============================================================================


struct  BFu17ll_BFu31i_I  {
  __tsu64 v1:17;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu17ll_BFu31i_I) C1{ FL:17 Fi:31 Fi}



static void Test_BFu17ll_BFu31i_I()
{
  {
    init_simple_test("BFu17ll_BFu31i_I");
    static STRUCT_IF_C BFu17ll_BFu31i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_I, BFu17ll_BFu31i_I)
//============================================================================


struct  BFu17ll_BFu31i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu17ll_BFu31i_Ip) C1{ FL:17 Fi:31 Fp}



static void Test_BFu17ll_BFu31i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu31i_Ip");
    static STRUCT_IF_C BFu17ll_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Ip, BFu17ll_BFu31i_Ip)
//============================================================================


struct  BFu17ll_BFu31i_L  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu31i_L) C1{ FL:17 Fi:31 FL}



static void Test_BFu17ll_BFu31i_L()
{
  {
    init_simple_test("BFu17ll_BFu31i_L");
    static STRUCT_IF_C BFu17ll_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_L, BFu17ll_BFu31i_L)
//============================================================================


struct  BFu17ll_BFu31i_S  {
  __tsu64 v1:17;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu17ll_BFu31i_S) C1{ FL:17 Fi:31 Fs}



static void Test_BFu17ll_BFu31i_S()
{
  {
    init_simple_test("BFu17ll_BFu31i_S");
    static STRUCT_IF_C BFu17ll_BFu31i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_S, BFu17ll_BFu31i_S)
//============================================================================


struct  BFu17ll_BFu31i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu31i_Uc) C1{ FL:17 Fi:31 Fc}



static void Test_BFu17ll_BFu31i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu31i_Uc");
    static STRUCT_IF_C BFu17ll_BFu31i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Uc, BFu17ll_BFu31i_Uc)
//============================================================================


struct  BFu17ll_BFu31i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu31i_Ui) C1{ FL:17 Fi:31 Fi}



static void Test_BFu17ll_BFu31i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu31i_Ui");
    static STRUCT_IF_C BFu17ll_BFu31i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Ui, BFu17ll_BFu31i_Ui)
//============================================================================


struct  BFu17ll_BFu31i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu31i_Ul) C1{ FL:17 Fi:31 FL}



static void Test_BFu17ll_BFu31i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu31i_Ul");
    static STRUCT_IF_C BFu17ll_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Ul, BFu17ll_BFu31i_Ul)
//============================================================================


struct  BFu17ll_BFu31i_Us  {
  __tsu64 v1:17;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu31i_Us) C1{ FL:17 Fi:31 Fs}



static void Test_BFu17ll_BFu31i_Us()
{
  {
    init_simple_test("BFu17ll_BFu31i_Us");
    static STRUCT_IF_C BFu17ll_BFu31i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Us, BFu17ll_BFu31i_Us)
//============================================================================


struct  BFu17ll_BFu31i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu17ll_BFu31i_Vp) C1{ FL:17 Fi:31 Fp}



static void Test_BFu17ll_BFu31i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu31i_Vp");
    static STRUCT_IF_C BFu17ll_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31i_Vp, BFu17ll_BFu31i_Vp)
//============================================================================


struct  BFu17ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu17ll_BFu31ll) C1{ FL:17 FL:31}



static void Test_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll, BFu17ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu31ll_BFu15i) C1{ FL:17 FL:31 Fi:15}



static void Test_BFu17ll_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu15i, BFu17ll_BFu31ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu31ll_BFu15ll) C1{ FL:17 FL:31 FL:15}



static void Test_BFu17ll_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu15ll, BFu17ll_BFu31ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu31ll_BFu15s) C1{ FL:17 FL:31 Fs:15}



static void Test_BFu17ll_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu17ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu15s, BFu17ll_BFu31ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu31ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu31ll_BFu16i) C1{ FL:17 FL:31 Fi:16}



static void Test_BFu17ll_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu16i, BFu17ll_BFu31ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu31ll_BFu16ll) C1{ FL:17 FL:31 FL:16}



static void Test_BFu17ll_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu16ll, BFu17ll_BFu31ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu31ll_BFu16s) C1{ FL:17 FL:31 Fs:16}



static void Test_BFu17ll_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu17ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu16s, BFu17ll_BFu31ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu31ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu31ll_BFu17i) C1{ FL:17 FL:31 Fi:17}



static void Test_BFu17ll_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu17i, BFu17ll_BFu31ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu31ll_BFu17ll) C1{ FL:17 FL:31 FL:17}



static void Test_BFu17ll_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu17ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu17ll, BFu17ll_BFu31ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu31ll_BFu1c) C1{ FL:17 FL:31 Fc:1}



static void Test_BFu17ll_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu1c, BFu17ll_BFu31ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu31ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu31ll_BFu1i) C1{ FL:17 FL:31 Fi:1}



static void Test_BFu17ll_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu1i, BFu17ll_BFu31ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu31ll_BFu1ll) C1{ FL:17 FL:31 FL:1}



static void Test_BFu17ll_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu1ll, BFu17ll_BFu31ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu31ll_BFu1s) C1{ FL:17 FL:31 Fs:1}



static void Test_BFu17ll_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu17ll_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu1s, BFu17ll_BFu31ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu31ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu31ll_BFu31i) C1{ FL:17 FL:31 Fi:31}



static void Test_BFu17ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu31i, BFu17ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu31ll_BFu31ll) C1{ FL:17 FL:31 FL:31}



static void Test_BFu17ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu17ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu31ll, BFu17ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu31ll_BFu32i) C1{ FL:17 FL:31 Fi:32}



static void Test_BFu17ll_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu32i, BFu17ll_BFu31ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu31ll_BFu32ll) C1{ FL:17 FL:31 FL:32}



static void Test_BFu17ll_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu17ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu32ll, BFu17ll_BFu31ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu31ll_BFu33) C1{ FL:17 FL:31 FL:33}



static void Test_BFu17ll_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu17ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu33, BFu17ll_BFu31ll_BFu33)
//============================================================================


struct  BFu17ll_BFu31ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu31ll_BFu7c) C1{ FL:17 FL:31 Fc:7}



static void Test_BFu17ll_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu7c, BFu17ll_BFu31ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu31ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu31ll_BFu7i) C1{ FL:17 FL:31 Fi:7}



static void Test_BFu17ll_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu7i, BFu17ll_BFu31ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu31ll_BFu7ll) C1{ FL:17 FL:31 FL:7}



static void Test_BFu17ll_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu7ll, BFu17ll_BFu31ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu31ll_BFu7s) C1{ FL:17 FL:31 Fs:7}



static void Test_BFu17ll_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu17ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu7s, BFu17ll_BFu31ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu31ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu31ll_BFu8c) C1{ FL:17 FL:31 Fc:8}



static void Test_BFu17ll_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu8c, BFu17ll_BFu31ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu31ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu31ll_BFu8i) C1{ FL:17 FL:31 Fi:8}



static void Test_BFu17ll_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu8i, BFu17ll_BFu31ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu31ll_BFu8ll) C1{ FL:17 FL:31 FL:8}



static void Test_BFu17ll_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu8ll, BFu17ll_BFu31ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu31ll_BFu8s) C1{ FL:17 FL:31 Fs:8}



static void Test_BFu17ll_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu17ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu8s, BFu17ll_BFu31ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu31ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu31ll_BFu9i) C1{ FL:17 FL:31 Fi:9}



static void Test_BFu17ll_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu9i, BFu17ll_BFu31ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu31ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu31ll_BFu9ll) C1{ FL:17 FL:31 FL:9}



static void Test_BFu17ll_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu9ll, BFu17ll_BFu31ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu31ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu31ll_BFu9s) C1{ FL:17 FL:31 Fs:9}



static void Test_BFu17ll_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu17ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_BFu9s, BFu17ll_BFu31ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu31ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu17ll_BFu31ll_C) C1{ FL:17 FL:31 Fc}



static void Test_BFu17ll_BFu31ll_C()
{
  {
    init_simple_test("BFu17ll_BFu31ll_C");
    static STRUCT_IF_C BFu17ll_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_C");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_C, BFu17ll_BFu31ll_C)
//============================================================================


struct  BFu17ll_BFu31ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu17ll_BFu31ll_D) C1{ FL:17 FL:31 FL}



static void Test_BFu17ll_BFu31ll_D()
{
  {
    init_simple_test("BFu17ll_BFu31ll_D");
    static STRUCT_IF_C BFu17ll_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_D, BFu17ll_BFu31ll_D)
//============================================================================


struct  BFu17ll_BFu31ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu17ll_BFu31ll_F) C1{ FL:17 FL:31 Fi}



static void Test_BFu17ll_BFu31ll_F()
{
  {
    init_simple_test("BFu17ll_BFu31ll_F");
    static STRUCT_IF_C BFu17ll_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_F, BFu17ll_BFu31ll_F)
//============================================================================


struct  BFu17ll_BFu31ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu17ll_BFu31ll_I) C1{ FL:17 FL:31 Fi}



static void Test_BFu17ll_BFu31ll_I()
{
  {
    init_simple_test("BFu17ll_BFu31ll_I");
    static STRUCT_IF_C BFu17ll_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_I, BFu17ll_BFu31ll_I)
//============================================================================


struct  BFu17ll_BFu31ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu17ll_BFu31ll_Ip) C1{ FL:17 FL:31 Fp}



static void Test_BFu17ll_BFu31ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Ip, BFu17ll_BFu31ll_Ip)
//============================================================================


struct  BFu17ll_BFu31ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu31ll_L) C1{ FL:17 FL:31 FL}



static void Test_BFu17ll_BFu31ll_L()
{
  {
    init_simple_test("BFu17ll_BFu31ll_L");
    static STRUCT_IF_C BFu17ll_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_L, BFu17ll_BFu31ll_L)
//============================================================================


struct  BFu17ll_BFu31ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu17ll_BFu31ll_S) C1{ FL:17 FL:31 Fs}



static void Test_BFu17ll_BFu31ll_S()
{
  {
    init_simple_test("BFu17ll_BFu31ll_S");
    static STRUCT_IF_C BFu17ll_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_S, BFu17ll_BFu31ll_S)
//============================================================================


struct  BFu17ll_BFu31ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu31ll_Uc) C1{ FL:17 FL:31 Fc}



static void Test_BFu17ll_BFu31ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Uc");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Uc, BFu17ll_BFu31ll_Uc)
//============================================================================


struct  BFu17ll_BFu31ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu31ll_Ui) C1{ FL:17 FL:31 Fi}



static void Test_BFu17ll_BFu31ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Ui, BFu17ll_BFu31ll_Ui)
//============================================================================


struct  BFu17ll_BFu31ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu31ll_Ul) C1{ FL:17 FL:31 FL}



static void Test_BFu17ll_BFu31ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Ul, BFu17ll_BFu31ll_Ul)
//============================================================================


struct  BFu17ll_BFu31ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu31ll_Us) C1{ FL:17 FL:31 Fs}



static void Test_BFu17ll_BFu31ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Us");
    static STRUCT_IF_C BFu17ll_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Us, BFu17ll_BFu31ll_Us)
//============================================================================


struct  BFu17ll_BFu31ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu17ll_BFu31ll_Vp) C1{ FL:17 FL:31 Fp}



static void Test_BFu17ll_BFu31ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu31ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu31ll_Vp, BFu17ll_BFu31ll_Vp)
//============================================================================


struct  BFu17ll_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu17ll_BFu32i) C1{ FL:17 Fi:32}



static void Test_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i, BFu17ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu32i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu32i_BFu15i) C1{ FL:17 Fi:32 Fi:15}



static void Test_BFu17ll_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu15i, BFu17ll_BFu32i_BFu15i)
//============================================================================


struct  BFu17ll_BFu32i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu32i_BFu15ll) C1{ FL:17 Fi:32 FL:15}



static void Test_BFu17ll_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu15ll, BFu17ll_BFu32i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu32i_BFu15s) C1{ FL:17 Fi:32 Fs:15}



static void Test_BFu17ll_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu15s, BFu17ll_BFu32i_BFu15s)
//============================================================================


struct  BFu17ll_BFu32i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu32i_BFu16i) C1{ FL:17 Fi:32 Fi:16}



static void Test_BFu17ll_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu16i, BFu17ll_BFu32i_BFu16i)
//============================================================================


struct  BFu17ll_BFu32i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu32i_BFu16ll) C1{ FL:17 Fi:32 FL:16}



static void Test_BFu17ll_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu16ll, BFu17ll_BFu32i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu32i_BFu16s) C1{ FL:17 Fi:32 Fs:16}



static void Test_BFu17ll_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu16s, BFu17ll_BFu32i_BFu16s)
//============================================================================


struct  BFu17ll_BFu32i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu32i_BFu17i) C1{ FL:17 Fi:32 Fi:17}



static void Test_BFu17ll_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu17i, BFu17ll_BFu32i_BFu17i)
//============================================================================


struct  BFu17ll_BFu32i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu32i_BFu17ll) C1{ FL:17 Fi:32 FL:17}



static void Test_BFu17ll_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu17ll, BFu17ll_BFu32i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu32i_BFu1c) C1{ FL:17 Fi:32 Fc:1}



static void Test_BFu17ll_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17ll_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu1c, BFu17ll_BFu32i_BFu1c)
//============================================================================


struct  BFu17ll_BFu32i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu32i_BFu1i) C1{ FL:17 Fi:32 Fi:1}



static void Test_BFu17ll_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17ll_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu1i, BFu17ll_BFu32i_BFu1i)
//============================================================================


struct  BFu17ll_BFu32i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu32i_BFu1ll) C1{ FL:17 Fi:32 FL:1}



static void Test_BFu17ll_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17ll_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu1ll, BFu17ll_BFu32i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu32i_BFu1s) C1{ FL:17 Fi:32 Fs:1}



static void Test_BFu17ll_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu17ll_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu1s, BFu17ll_BFu32i_BFu1s)
//============================================================================


struct  BFu17ll_BFu32i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu32i_BFu31i) C1{ FL:17 Fi:32 Fi:31}



static void Test_BFu17ll_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu31i, BFu17ll_BFu32i_BFu31i)
//============================================================================


struct  BFu17ll_BFu32i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu32i_BFu31ll) C1{ FL:17 Fi:32 FL:31}



static void Test_BFu17ll_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu31ll, BFu17ll_BFu32i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu32i_BFu32i) C1{ FL:17 Fi:32 Fi:32}



static void Test_BFu17ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu32i, BFu17ll_BFu32i_BFu32i)
//============================================================================


struct  BFu17ll_BFu32i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu32i_BFu32ll) C1{ FL:17 Fi:32 FL:32}



static void Test_BFu17ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu32ll, BFu17ll_BFu32i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu32i_BFu33) C1{ FL:17 Fi:32 FL:33}



static void Test_BFu17ll_BFu32i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu17ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu33, BFu17ll_BFu32i_BFu33)
//============================================================================


struct  BFu17ll_BFu32i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu32i_BFu7c) C1{ FL:17 Fi:32 Fc:7}



static void Test_BFu17ll_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu7c, BFu17ll_BFu32i_BFu7c)
//============================================================================


struct  BFu17ll_BFu32i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu32i_BFu7i) C1{ FL:17 Fi:32 Fi:7}



static void Test_BFu17ll_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu7i, BFu17ll_BFu32i_BFu7i)
//============================================================================


struct  BFu17ll_BFu32i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu32i_BFu7ll) C1{ FL:17 Fi:32 FL:7}



static void Test_BFu17ll_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu7ll, BFu17ll_BFu32i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu32i_BFu7s) C1{ FL:17 Fi:32 Fs:7}



static void Test_BFu17ll_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu17ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu7s, BFu17ll_BFu32i_BFu7s)
//============================================================================


struct  BFu17ll_BFu32i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu32i_BFu8c) C1{ FL:17 Fi:32 Fc:8}



static void Test_BFu17ll_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu8c, BFu17ll_BFu32i_BFu8c)
//============================================================================


struct  BFu17ll_BFu32i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu32i_BFu8i) C1{ FL:17 Fi:32 Fi:8}



static void Test_BFu17ll_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu8i, BFu17ll_BFu32i_BFu8i)
//============================================================================


struct  BFu17ll_BFu32i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu32i_BFu8ll) C1{ FL:17 Fi:32 FL:8}



static void Test_BFu17ll_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu8ll, BFu17ll_BFu32i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu32i_BFu8s) C1{ FL:17 Fi:32 Fs:8}



static void Test_BFu17ll_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu17ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu8s, BFu17ll_BFu32i_BFu8s)
//============================================================================


struct  BFu17ll_BFu32i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu32i_BFu9i) C1{ FL:17 Fi:32 Fi:9}



static void Test_BFu17ll_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu9i, BFu17ll_BFu32i_BFu9i)
//============================================================================


struct  BFu17ll_BFu32i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu32i_BFu9ll) C1{ FL:17 Fi:32 FL:9}



static void Test_BFu17ll_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu9ll, BFu17ll_BFu32i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu32i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu32i_BFu9s) C1{ FL:17 Fi:32 Fs:9}



static void Test_BFu17ll_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu32i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu32i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu17ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_BFu9s, BFu17ll_BFu32i_BFu9s)
//============================================================================


struct  BFu17ll_BFu32i_C  {
  __tsu64 v1:17;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu17ll_BFu32i_C) C1{ FL:17 Fi:32 Fc}



static void Test_BFu17ll_BFu32i_C()
{
  {
    init_simple_test("BFu17ll_BFu32i_C");
    static STRUCT_IF_C BFu17ll_BFu32i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_C, BFu17ll_BFu32i_C)
//============================================================================


struct  BFu17ll_BFu32i_D  {
  __tsu64 v1:17;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu17ll_BFu32i_D) C1{ FL:17 Fi:32 FL}



static void Test_BFu17ll_BFu32i_D()
{
  {
    init_simple_test("BFu17ll_BFu32i_D");
    static STRUCT_IF_C BFu17ll_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_D, BFu17ll_BFu32i_D)
//============================================================================


struct  BFu17ll_BFu32i_F  {
  __tsu64 v1:17;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu17ll_BFu32i_F) C1{ FL:17 Fi:32 Fi}



static void Test_BFu17ll_BFu32i_F()
{
  {
    init_simple_test("BFu17ll_BFu32i_F");
    static STRUCT_IF_C BFu17ll_BFu32i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_F, BFu17ll_BFu32i_F)
//============================================================================


struct  BFu17ll_BFu32i_I  {
  __tsu64 v1:17;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu17ll_BFu32i_I) C1{ FL:17 Fi:32 Fi}



static void Test_BFu17ll_BFu32i_I()
{
  {
    init_simple_test("BFu17ll_BFu32i_I");
    static STRUCT_IF_C BFu17ll_BFu32i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_I, BFu17ll_BFu32i_I)
//============================================================================


struct  BFu17ll_BFu32i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu17ll_BFu32i_Ip) C1{ FL:17 Fi:32 Fp}



static void Test_BFu17ll_BFu32i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu32i_Ip");
    static STRUCT_IF_C BFu17ll_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Ip, BFu17ll_BFu32i_Ip)
//============================================================================


struct  BFu17ll_BFu32i_L  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu32i_L) C1{ FL:17 Fi:32 FL}



static void Test_BFu17ll_BFu32i_L()
{
  {
    init_simple_test("BFu17ll_BFu32i_L");
    static STRUCT_IF_C BFu17ll_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_L, BFu17ll_BFu32i_L)
//============================================================================


struct  BFu17ll_BFu32i_S  {
  __tsu64 v1:17;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu17ll_BFu32i_S) C1{ FL:17 Fi:32 Fs}



static void Test_BFu17ll_BFu32i_S()
{
  {
    init_simple_test("BFu17ll_BFu32i_S");
    static STRUCT_IF_C BFu17ll_BFu32i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_S, BFu17ll_BFu32i_S)
//============================================================================


struct  BFu17ll_BFu32i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu32i_Uc) C1{ FL:17 Fi:32 Fc}



static void Test_BFu17ll_BFu32i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu32i_Uc");
    static STRUCT_IF_C BFu17ll_BFu32i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Uc, BFu17ll_BFu32i_Uc)
//============================================================================


struct  BFu17ll_BFu32i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu32i_Ui) C1{ FL:17 Fi:32 Fi}



static void Test_BFu17ll_BFu32i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu32i_Ui");
    static STRUCT_IF_C BFu17ll_BFu32i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Ui, BFu17ll_BFu32i_Ui)
//============================================================================


struct  BFu17ll_BFu32i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu32i_Ul) C1{ FL:17 Fi:32 FL}



static void Test_BFu17ll_BFu32i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu32i_Ul");
    static STRUCT_IF_C BFu17ll_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Ul, BFu17ll_BFu32i_Ul)
//============================================================================


struct  BFu17ll_BFu32i_Us  {
  __tsu64 v1:17;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu32i_Us) C1{ FL:17 Fi:32 Fs}



static void Test_BFu17ll_BFu32i_Us()
{
  {
    init_simple_test("BFu17ll_BFu32i_Us");
    static STRUCT_IF_C BFu17ll_BFu32i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Us, BFu17ll_BFu32i_Us)
//============================================================================


struct  BFu17ll_BFu32i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu17ll_BFu32i_Vp) C1{ FL:17 Fi:32 Fp}



static void Test_BFu17ll_BFu32i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu32i_Vp");
    static STRUCT_IF_C BFu17ll_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32i_Vp, BFu17ll_BFu32i_Vp)
//============================================================================


struct  BFu17ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu17ll_BFu32ll) C1{ FL:17 FL:32}



static void Test_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll, BFu17ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu32ll_BFu15i) C1{ FL:17 FL:32 Fi:15}



static void Test_BFu17ll_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu15i, BFu17ll_BFu32ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu32ll_BFu15ll) C1{ FL:17 FL:32 FL:15}



static void Test_BFu17ll_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu15ll, BFu17ll_BFu32ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu32ll_BFu15s) C1{ FL:17 FL:32 Fs:15}



static void Test_BFu17ll_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu17ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu15s, BFu17ll_BFu32ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu32ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu32ll_BFu16i) C1{ FL:17 FL:32 Fi:16}



static void Test_BFu17ll_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu16i, BFu17ll_BFu32ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu32ll_BFu16ll) C1{ FL:17 FL:32 FL:16}



static void Test_BFu17ll_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu17ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu17ll_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu16ll, BFu17ll_BFu32ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu32ll_BFu16s) C1{ FL:17 FL:32 Fs:16}



static void Test_BFu17ll_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu16s, BFu17ll_BFu32ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu32ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu32ll_BFu17i) C1{ FL:17 FL:32 Fi:17}



static void Test_BFu17ll_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu17i, BFu17ll_BFu32ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu32ll_BFu17ll) C1{ FL:17 FL:32 FL:17}



static void Test_BFu17ll_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu17ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu17ll, BFu17ll_BFu32ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu32ll_BFu1c) C1{ FL:17 FL:32 Fc:1}



static void Test_BFu17ll_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu1c, BFu17ll_BFu32ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu32ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu32ll_BFu1i) C1{ FL:17 FL:32 Fi:1}



static void Test_BFu17ll_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu1i, BFu17ll_BFu32ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu32ll_BFu1ll) C1{ FL:17 FL:32 FL:1}



static void Test_BFu17ll_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu1ll, BFu17ll_BFu32ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu32ll_BFu1s) C1{ FL:17 FL:32 Fs:1}



static void Test_BFu17ll_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu17ll_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu1s, BFu17ll_BFu32ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu32ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu32ll_BFu31i) C1{ FL:17 FL:32 Fi:31}



static void Test_BFu17ll_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu31i, BFu17ll_BFu32ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu32ll_BFu31ll) C1{ FL:17 FL:32 FL:31}



static void Test_BFu17ll_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu17ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu17ll_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu31ll, BFu17ll_BFu32ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu32ll_BFu32i) C1{ FL:17 FL:32 Fi:32}



static void Test_BFu17ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu32i, BFu17ll_BFu32ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu32ll_BFu32ll) C1{ FL:17 FL:32 FL:32}



static void Test_BFu17ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu17ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu32ll, BFu17ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu32ll_BFu33) C1{ FL:17 FL:32 FL:33}



static void Test_BFu17ll_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu17ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu17ll_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu33, BFu17ll_BFu32ll_BFu33)
//============================================================================


struct  BFu17ll_BFu32ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu32ll_BFu7c) C1{ FL:17 FL:32 Fc:7}



static void Test_BFu17ll_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu7c, BFu17ll_BFu32ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu32ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu32ll_BFu7i) C1{ FL:17 FL:32 Fi:7}



static void Test_BFu17ll_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu7i, BFu17ll_BFu32ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu32ll_BFu7ll) C1{ FL:17 FL:32 FL:7}



static void Test_BFu17ll_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu7ll, BFu17ll_BFu32ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu32ll_BFu7s) C1{ FL:17 FL:32 Fs:7}



static void Test_BFu17ll_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu17ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu7s, BFu17ll_BFu32ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu32ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu32ll_BFu8c) C1{ FL:17 FL:32 Fc:8}



static void Test_BFu17ll_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu8c, BFu17ll_BFu32ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu32ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu32ll_BFu8i) C1{ FL:17 FL:32 Fi:8}



static void Test_BFu17ll_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu8i, BFu17ll_BFu32ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu32ll_BFu8ll) C1{ FL:17 FL:32 FL:8}



static void Test_BFu17ll_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu8ll, BFu17ll_BFu32ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu32ll_BFu8s) C1{ FL:17 FL:32 Fs:8}



static void Test_BFu17ll_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu17ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu8s, BFu17ll_BFu32ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu32ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu32ll_BFu9i) C1{ FL:17 FL:32 Fi:9}



static void Test_BFu17ll_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu9i, BFu17ll_BFu32ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu32ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu32ll_BFu9ll) C1{ FL:17 FL:32 FL:9}



static void Test_BFu17ll_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu9ll, BFu17ll_BFu32ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu32ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu32ll_BFu9s) C1{ FL:17 FL:32 Fs:9}



static void Test_BFu17ll_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu17ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_BFu9s, BFu17ll_BFu32ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu32ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu17ll_BFu32ll_C) C1{ FL:17 FL:32 Fc}



static void Test_BFu17ll_BFu32ll_C()
{
  {
    init_simple_test("BFu17ll_BFu32ll_C");
    static STRUCT_IF_C BFu17ll_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_C");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_C, BFu17ll_BFu32ll_C)
//============================================================================


struct  BFu17ll_BFu32ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu17ll_BFu32ll_D) C1{ FL:17 FL:32 FL}



static void Test_BFu17ll_BFu32ll_D()
{
  {
    init_simple_test("BFu17ll_BFu32ll_D");
    static STRUCT_IF_C BFu17ll_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_D, BFu17ll_BFu32ll_D)
//============================================================================


struct  BFu17ll_BFu32ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu17ll_BFu32ll_F) C1{ FL:17 FL:32 Fi}



static void Test_BFu17ll_BFu32ll_F()
{
  {
    init_simple_test("BFu17ll_BFu32ll_F");
    static STRUCT_IF_C BFu17ll_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_F, BFu17ll_BFu32ll_F)
//============================================================================


struct  BFu17ll_BFu32ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu17ll_BFu32ll_I) C1{ FL:17 FL:32 Fi}



static void Test_BFu17ll_BFu32ll_I()
{
  {
    init_simple_test("BFu17ll_BFu32ll_I");
    static STRUCT_IF_C BFu17ll_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_I, BFu17ll_BFu32ll_I)
//============================================================================


struct  BFu17ll_BFu32ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu17ll_BFu32ll_Ip) C1{ FL:17 FL:32 Fp}



static void Test_BFu17ll_BFu32ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Ip, BFu17ll_BFu32ll_Ip)
//============================================================================


struct  BFu17ll_BFu32ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu32ll_L) C1{ FL:17 FL:32 FL}



static void Test_BFu17ll_BFu32ll_L()
{
  {
    init_simple_test("BFu17ll_BFu32ll_L");
    static STRUCT_IF_C BFu17ll_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_L, BFu17ll_BFu32ll_L)
//============================================================================


struct  BFu17ll_BFu32ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu17ll_BFu32ll_S) C1{ FL:17 FL:32 Fs}



static void Test_BFu17ll_BFu32ll_S()
{
  {
    init_simple_test("BFu17ll_BFu32ll_S");
    static STRUCT_IF_C BFu17ll_BFu32ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_S");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_S, BFu17ll_BFu32ll_S)
//============================================================================


struct  BFu17ll_BFu32ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu32ll_Uc) C1{ FL:17 FL:32 Fc}



static void Test_BFu17ll_BFu32ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Uc");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Uc, BFu17ll_BFu32ll_Uc)
//============================================================================


struct  BFu17ll_BFu32ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu32ll_Ui) C1{ FL:17 FL:32 Fi}



static void Test_BFu17ll_BFu32ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Ui, BFu17ll_BFu32ll_Ui)
//============================================================================


struct  BFu17ll_BFu32ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu32ll_Ul) C1{ FL:17 FL:32 FL}



static void Test_BFu17ll_BFu32ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Ul, BFu17ll_BFu32ll_Ul)
//============================================================================


struct  BFu17ll_BFu32ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu32ll_Us) C1{ FL:17 FL:32 Fs}



static void Test_BFu17ll_BFu32ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Us");
    static STRUCT_IF_C BFu17ll_BFu32ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Us");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Us, BFu17ll_BFu32ll_Us)
//============================================================================


struct  BFu17ll_BFu32ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu17ll_BFu32ll_Vp) C1{ FL:17 FL:32 Fp}



static void Test_BFu17ll_BFu32ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu32ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu32ll_Vp, BFu17ll_BFu32ll_Vp)
//============================================================================


struct  BFu17ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu17ll_BFu33) C1{ FL:17 FL:33}



static void Test_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33, BFu17ll_BFu33)
//============================================================================


struct  BFu17ll_BFu33_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu33_BFu15i) C1{ FL:17 FL:33 Fi:15}



static void Test_BFu17ll_BFu33_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu15i, BFu17ll_BFu33_BFu15i)
//============================================================================


struct  BFu17ll_BFu33_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu33_BFu15ll) C1{ FL:17 FL:33 FL:15}



static void Test_BFu17ll_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 15, 1, "BFu17ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 15, hide_ull(1LL<<14), "BFu17ll_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu15ll, BFu17ll_BFu33_BFu15ll)
//============================================================================


struct  BFu17ll_BFu33_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu33_BFu15s) C1{ FL:17 FL:33 Fs:15}



static void Test_BFu17ll_BFu33_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu17ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu15s, BFu17ll_BFu33_BFu15s)
//============================================================================


struct  BFu17ll_BFu33_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu33_BFu16i) C1{ FL:17 FL:33 Fi:16}



static void Test_BFu17ll_BFu33_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu16i, BFu17ll_BFu33_BFu16i)
//============================================================================


struct  BFu17ll_BFu33_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu33_BFu16ll) C1{ FL:17 FL:33 FL:16}



static void Test_BFu17ll_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 16, 1, "BFu17ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 16, hide_ull(1LL<<15), "BFu17ll_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu16ll, BFu17ll_BFu33_BFu16ll)
//============================================================================


struct  BFu17ll_BFu33_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu33_BFu16s) C1{ FL:17 FL:33 Fs:16}



static void Test_BFu17ll_BFu33_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu17ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu16s, BFu17ll_BFu33_BFu16s)
//============================================================================


struct  BFu17ll_BFu33_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu33_BFu17i) C1{ FL:17 FL:33 Fi:17}



static void Test_BFu17ll_BFu33_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu17ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu17i, BFu17ll_BFu33_BFu17i)
//============================================================================


struct  BFu17ll_BFu33_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu33_BFu17ll) C1{ FL:17 FL:33 FL:17}



static void Test_BFu17ll_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 17, 1, "BFu17ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu17ll, BFu17ll_BFu33_BFu17ll)
//============================================================================


struct  BFu17ll_BFu33_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu33_BFu1c) C1{ FL:17 FL:33 Fc:1}



static void Test_BFu17ll_BFu33_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17ll_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu1c, BFu17ll_BFu33_BFu1c)
//============================================================================


struct  BFu17ll_BFu33_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu33_BFu1i) C1{ FL:17 FL:33 Fi:1}



static void Test_BFu17ll_BFu33_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17ll_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu1i, BFu17ll_BFu33_BFu1i)
//============================================================================


struct  BFu17ll_BFu33_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu33_BFu1ll) C1{ FL:17 FL:33 FL:1}



static void Test_BFu17ll_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17ll_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu1ll, BFu17ll_BFu33_BFu1ll)
//============================================================================


struct  BFu17ll_BFu33_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu33_BFu1s) C1{ FL:17 FL:33 Fs:1}



static void Test_BFu17ll_BFu33_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 6, 2, 1, 1, "BFu17ll_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu1s, BFu17ll_BFu33_BFu1s)
//============================================================================


struct  BFu17ll_BFu33_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu33_BFu31i) C1{ FL:17 FL:33 Fi:31}



static void Test_BFu17ll_BFu33_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu17ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu31i, BFu17ll_BFu33_BFu31i)
//============================================================================


struct  BFu17ll_BFu33_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu33_BFu31ll) C1{ FL:17 FL:33 FL:31}



static void Test_BFu17ll_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 31, 1, "BFu17ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 31, hide_ull(1LL<<30), "BFu17ll_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu31ll, BFu17ll_BFu33_BFu31ll)
//============================================================================


struct  BFu17ll_BFu33_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu33_BFu32i) C1{ FL:17 FL:33 Fi:32}



static void Test_BFu17ll_BFu33_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu17ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu32i, BFu17ll_BFu33_BFu32i)
//============================================================================


struct  BFu17ll_BFu33_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu33_BFu32ll) C1{ FL:17 FL:33 FL:32}



static void Test_BFu17ll_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 32, 1, "BFu17ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 32, hide_ull(1LL<<31), "BFu17ll_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu32ll, BFu17ll_BFu33_BFu32ll)
//============================================================================


struct  BFu17ll_BFu33_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu33_BFu33) C1{ FL:17 FL:33 FL:33}



static void Test_BFu17ll_BFu33_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu33");
    static STRUCT_IF_C BFu17ll_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 33, 1, "BFu17ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu33, BFu17ll_BFu33_BFu33)
//============================================================================


struct  BFu17ll_BFu33_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu33_BFu7c) C1{ FL:17 FL:33 Fc:7}



static void Test_BFu17ll_BFu33_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 7, 0, 7, 1, "BFu17ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 7, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu7c, BFu17ll_BFu33_BFu7c)
//============================================================================


struct  BFu17ll_BFu33_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu33_BFu7i) C1{ FL:17 FL:33 Fi:7}



static void Test_BFu17ll_BFu33_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu7i, BFu17ll_BFu33_BFu7i)
//============================================================================


struct  BFu17ll_BFu33_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu33_BFu7ll) C1{ FL:17 FL:33 FL:7}



static void Test_BFu17ll_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu7ll, BFu17ll_BFu33_BFu7ll)
//============================================================================


struct  BFu17ll_BFu33_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu33_BFu7s) C1{ FL:17 FL:33 Fs:7}



static void Test_BFu17ll_BFu33_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 2, 7, 1, "BFu17ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 2, 7, hide_ull(1LL<<6), "BFu17ll_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu7s, BFu17ll_BFu33_BFu7s)
//============================================================================


struct  BFu17ll_BFu33_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu33_BFu8c) C1{ FL:17 FL:33 Fc:8}



static void Test_BFu17ll_BFu33_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu17ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu8c, BFu17ll_BFu33_BFu8c)
//============================================================================


struct  BFu17ll_BFu33_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu33_BFu8i) C1{ FL:17 FL:33 Fi:8}



static void Test_BFu17ll_BFu33_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu8i, BFu17ll_BFu33_BFu8i)
//============================================================================


struct  BFu17ll_BFu33_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu33_BFu8ll) C1{ FL:17 FL:33 FL:8}



static void Test_BFu17ll_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu8ll, BFu17ll_BFu33_BFu8ll)
//============================================================================


struct  BFu17ll_BFu33_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu33_BFu8s) C1{ FL:17 FL:33 Fs:8}



static void Test_BFu17ll_BFu33_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 2, 8, 1, "BFu17ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 2, 8, hide_ull(1LL<<7), "BFu17ll_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu8s, BFu17ll_BFu33_BFu8s)
//============================================================================


struct  BFu17ll_BFu33_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu33_BFu9i) C1{ FL:17 FL:33 Fi:9}



static void Test_BFu17ll_BFu33_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu9i, BFu17ll_BFu33_BFu9i)
//============================================================================


struct  BFu17ll_BFu33_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu33_BFu9ll) C1{ FL:17 FL:33 FL:9}



static void Test_BFu17ll_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu9ll, BFu17ll_BFu33_BFu9ll)
//============================================================================


struct  BFu17ll_BFu33_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu33_BFu9s) C1{ FL:17 FL:33 Fs:9}



static void Test_BFu17ll_BFu33_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu33_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 2, 9, 1, "BFu17ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 2, 9, hide_ull(1LL<<8), "BFu17ll_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_BFu9s, BFu17ll_BFu33_BFu9s)
//============================================================================


struct  BFu17ll_BFu33_C  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu17ll_BFu33_C) C1{ FL:17 FL:33 Fc}



static void Test_BFu17ll_BFu33_C()
{
  {
    init_simple_test("BFu17ll_BFu33_C");
    static STRUCT_IF_C BFu17ll_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_C");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_C");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_C");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_C, BFu17ll_BFu33_C)
//============================================================================


struct  BFu17ll_BFu33_D  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu17ll_BFu33_D) C1{ FL:17 FL:33 FL}



static void Test_BFu17ll_BFu33_D()
{
  {
    init_simple_test("BFu17ll_BFu33_D");
    static STRUCT_IF_C BFu17ll_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_D");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_D");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_D, BFu17ll_BFu33_D)
//============================================================================


struct  BFu17ll_BFu33_F  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu17ll_BFu33_F) C1{ FL:17 FL:33 Fi}



static void Test_BFu17ll_BFu33_F()
{
  {
    init_simple_test("BFu17ll_BFu33_F");
    static STRUCT_IF_C BFu17ll_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_F");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_F");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_F, BFu17ll_BFu33_F)
//============================================================================


struct  BFu17ll_BFu33_I  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu17ll_BFu33_I) C1{ FL:17 FL:33 Fi}



static void Test_BFu17ll_BFu33_I()
{
  {
    init_simple_test("BFu17ll_BFu33_I");
    static STRUCT_IF_C BFu17ll_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_I");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_I");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_I, BFu17ll_BFu33_I)
//============================================================================


struct  BFu17ll_BFu33_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu17ll_BFu33_Ip) C1{ FL:17 FL:33 Fp}



static void Test_BFu17ll_BFu33_Ip()
{
  {
    init_simple_test("BFu17ll_BFu33_Ip");
    static STRUCT_IF_C BFu17ll_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Ip, BFu17ll_BFu33_Ip)
//============================================================================


struct  BFu17ll_BFu33_L  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu33_L) C1{ FL:17 FL:33 FL}



static void Test_BFu17ll_BFu33_L()
{
  {
    init_simple_test("BFu17ll_BFu33_L");
    static STRUCT_IF_C BFu17ll_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_L");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_L");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_L, BFu17ll_BFu33_L)
//============================================================================


struct  BFu17ll_BFu33_S  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu17ll_BFu33_S) C1{ FL:17 FL:33 Fs}



static void Test_BFu17ll_BFu33_S()
{
  {
    init_simple_test("BFu17ll_BFu33_S");
    static STRUCT_IF_C BFu17ll_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_S");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_S");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_S, BFu17ll_BFu33_S)
//============================================================================


struct  BFu17ll_BFu33_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu33_Uc) C1{ FL:17 FL:33 Fc}



static void Test_BFu17ll_BFu33_Uc()
{
  {
    init_simple_test("BFu17ll_BFu33_Uc");
    static STRUCT_IF_C BFu17ll_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Uc");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Uc, BFu17ll_BFu33_Uc)
//============================================================================


struct  BFu17ll_BFu33_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu33_Ui) C1{ FL:17 FL:33 Fi}



static void Test_BFu17ll_BFu33_Ui()
{
  {
    init_simple_test("BFu17ll_BFu33_Ui");
    static STRUCT_IF_C BFu17ll_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Ui, BFu17ll_BFu33_Ui)
//============================================================================


struct  BFu17ll_BFu33_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu33_Ul) C1{ FL:17 FL:33 FL}



static void Test_BFu17ll_BFu33_Ul()
{
  {
    init_simple_test("BFu17ll_BFu33_Ul");
    static STRUCT_IF_C BFu17ll_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu17ll_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Ul, BFu17ll_BFu33_Ul)
//============================================================================


struct  BFu17ll_BFu33_Us  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu33_Us) C1{ FL:17 FL:33 Fs}



static void Test_BFu17ll_BFu33_Us()
{
  {
    init_simple_test("BFu17ll_BFu33_Us");
    static STRUCT_IF_C BFu17ll_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Us, BFu17ll_BFu33_Us)
//============================================================================


struct  BFu17ll_BFu33_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu17ll_BFu33_Vp) C1{ FL:17 FL:33 Fp}



static void Test_BFu17ll_BFu33_Vp()
{
  {
    init_simple_test("BFu17ll_BFu33_Vp");
    static STRUCT_IF_C BFu17ll_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu33_Vp, BFu17ll_BFu33_Vp)
//============================================================================


struct  BFu17ll_BFu7c  {
  __tsu64 v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu17ll_BFu7c) C1{ FL:17 Fc:7}



static void Test_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c, BFu17ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu7c_BFu15i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu7c_BFu15i) C1{ FL:17 Fc:7 Fi:15}



static void Test_BFu17ll_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu15i, BFu17ll_BFu7c_BFu15i)
//============================================================================


struct  BFu17ll_BFu7c_BFu15ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu7c_BFu15ll) C1{ FL:17 Fc:7 FL:15}



static void Test_BFu17ll_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu15ll, BFu17ll_BFu7c_BFu15ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu15s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu7c_BFu15s) C1{ FL:17 Fc:7 Fs:15}



static void Test_BFu17ll_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu15s, BFu17ll_BFu7c_BFu15s)
//============================================================================


struct  BFu17ll_BFu7c_BFu16i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu7c_BFu16i) C1{ FL:17 Fc:7 Fi:16}



static void Test_BFu17ll_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu16i, BFu17ll_BFu7c_BFu16i)
//============================================================================


struct  BFu17ll_BFu7c_BFu16ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu7c_BFu16ll) C1{ FL:17 Fc:7 FL:16}



static void Test_BFu17ll_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu16ll, BFu17ll_BFu7c_BFu16ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu16s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu7c_BFu16s) C1{ FL:17 Fc:7 Fs:16}



static void Test_BFu17ll_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu16s, BFu17ll_BFu7c_BFu16s)
//============================================================================


struct  BFu17ll_BFu7c_BFu17i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu7c_BFu17i) C1{ FL:17 Fc:7 Fi:17}



static void Test_BFu17ll_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu17i, BFu17ll_BFu7c_BFu17i)
//============================================================================


struct  BFu17ll_BFu7c_BFu17ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu7c_BFu17ll) C1{ FL:17 Fc:7 FL:17}



static void Test_BFu17ll_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu17ll, BFu17ll_BFu7c_BFu17ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu1c  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu7c_BFu1c) C1{ FL:17 Fc:7 Fc:1}



static void Test_BFu17ll_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu1c, BFu17ll_BFu7c_BFu1c)
//============================================================================


struct  BFu17ll_BFu7c_BFu1i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu7c_BFu1i) C1{ FL:17 Fc:7 Fi:1}



static void Test_BFu17ll_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu1i, BFu17ll_BFu7c_BFu1i)
//============================================================================


struct  BFu17ll_BFu7c_BFu1ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu7c_BFu1ll) C1{ FL:17 Fc:7 FL:1}



static void Test_BFu17ll_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu1ll, BFu17ll_BFu7c_BFu1ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu1s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu7c_BFu1s) C1{ FL:17 Fc:7 Fs:1}



static void Test_BFu17ll_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu1s, BFu17ll_BFu7c_BFu1s)
//============================================================================


struct  BFu17ll_BFu7c_BFu31i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu7c_BFu31i) C1{ FL:17 Fc:7 Fi:31}



static void Test_BFu17ll_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu31i, BFu17ll_BFu7c_BFu31i)
//============================================================================


struct  BFu17ll_BFu7c_BFu31ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu7c_BFu31ll) C1{ FL:17 Fc:7 FL:31}



static void Test_BFu17ll_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu31ll, BFu17ll_BFu7c_BFu31ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu32i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu7c_BFu32i) C1{ FL:17 Fc:7 Fi:32}



static void Test_BFu17ll_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu32i, BFu17ll_BFu7c_BFu32i)
//============================================================================


struct  BFu17ll_BFu7c_BFu32ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu7c_BFu32ll) C1{ FL:17 Fc:7 FL:32}



static void Test_BFu17ll_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu32ll, BFu17ll_BFu7c_BFu32ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu33  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu7c_BFu33) C1{ FL:17 Fc:7 FL:33}



static void Test_BFu17ll_BFu7c_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu33");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu33, BFu17ll_BFu7c_BFu33)
//============================================================================


struct  BFu17ll_BFu7c_BFu7c  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu7c_BFu7c) C1{ FL:17 Fc:7 Fc:7}



static void Test_BFu17ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu7c, BFu17ll_BFu7c_BFu7c)
//============================================================================


struct  BFu17ll_BFu7c_BFu7i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu7c_BFu7i) C1{ FL:17 Fc:7 Fi:7}



static void Test_BFu17ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu7i, BFu17ll_BFu7c_BFu7i)
//============================================================================


struct  BFu17ll_BFu7c_BFu7ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu7c_BFu7ll) C1{ FL:17 Fc:7 FL:7}



static void Test_BFu17ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu7ll, BFu17ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu7s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu7c_BFu7s) C1{ FL:17 Fc:7 Fs:7}



static void Test_BFu17ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu7s, BFu17ll_BFu7c_BFu7s)
//============================================================================


struct  BFu17ll_BFu7c_BFu8c  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu7c_BFu8c) C1{ FL:17 Fc:7 Fc:8}



static void Test_BFu17ll_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu8c, BFu17ll_BFu7c_BFu8c)
//============================================================================


struct  BFu17ll_BFu7c_BFu8i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu7c_BFu8i) C1{ FL:17 Fc:7 Fi:8}



static void Test_BFu17ll_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu8i, BFu17ll_BFu7c_BFu8i)
//============================================================================


struct  BFu17ll_BFu7c_BFu8ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu7c_BFu8ll) C1{ FL:17 Fc:7 FL:8}



static void Test_BFu17ll_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu8ll, BFu17ll_BFu7c_BFu8ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu8s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu7c_BFu8s) C1{ FL:17 Fc:7 Fs:8}



static void Test_BFu17ll_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu8s, BFu17ll_BFu7c_BFu8s)
//============================================================================


struct  BFu17ll_BFu7c_BFu9i  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu7c_BFu9i) C1{ FL:17 Fc:7 Fi:9}



static void Test_BFu17ll_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu9i, BFu17ll_BFu7c_BFu9i)
//============================================================================


struct  BFu17ll_BFu7c_BFu9ll  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu7c_BFu9ll) C1{ FL:17 Fc:7 FL:9}



static void Test_BFu17ll_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu9ll, BFu17ll_BFu7c_BFu9ll)
//============================================================================


struct  BFu17ll_BFu7c_BFu9s  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu7c_BFu9s) C1{ FL:17 Fc:7 Fs:9}



static void Test_BFu17ll_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu7c_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu7c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_BFu9s, BFu17ll_BFu7c_BFu9s)
//============================================================================


struct  BFu17ll_BFu7c_C  {
  __tsu64 v1:17;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu17ll_BFu7c_C) C1{ FL:17 Fc:7 Fc}



static void Test_BFu17ll_BFu7c_C()
{
  {
    init_simple_test("BFu17ll_BFu7c_C");
    static STRUCT_IF_C BFu17ll_BFu7c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_C, BFu17ll_BFu7c_C)
//============================================================================


struct  BFu17ll_BFu7c_D  {
  __tsu64 v1:17;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu17ll_BFu7c_D) C1{ FL:17 Fc:7 FL}



static void Test_BFu17ll_BFu7c_D()
{
  {
    init_simple_test("BFu17ll_BFu7c_D");
    static STRUCT_IF_C BFu17ll_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_D, BFu17ll_BFu7c_D)
//============================================================================


struct  BFu17ll_BFu7c_F  {
  __tsu64 v1:17;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu17ll_BFu7c_F) C1{ FL:17 Fc:7 Fi}



static void Test_BFu17ll_BFu7c_F()
{
  {
    init_simple_test("BFu17ll_BFu7c_F");
    static STRUCT_IF_C BFu17ll_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_F, BFu17ll_BFu7c_F)
//============================================================================


struct  BFu17ll_BFu7c_I  {
  __tsu64 v1:17;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu17ll_BFu7c_I) C1{ FL:17 Fc:7 Fi}



static void Test_BFu17ll_BFu7c_I()
{
  {
    init_simple_test("BFu17ll_BFu7c_I");
    static STRUCT_IF_C BFu17ll_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_I, BFu17ll_BFu7c_I)
//============================================================================


struct  BFu17ll_BFu7c_Ip  {
  __tsu64 v1:17;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu17ll_BFu7c_Ip) C1{ FL:17 Fc:7 Fp}



static void Test_BFu17ll_BFu7c_Ip()
{
  {
    init_simple_test("BFu17ll_BFu7c_Ip");
    static STRUCT_IF_C BFu17ll_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Ip, BFu17ll_BFu7c_Ip)
//============================================================================


struct  BFu17ll_BFu7c_L  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu7c_L) C1{ FL:17 Fc:7 FL}



static void Test_BFu17ll_BFu7c_L()
{
  {
    init_simple_test("BFu17ll_BFu7c_L");
    static STRUCT_IF_C BFu17ll_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_L, BFu17ll_BFu7c_L)
//============================================================================


struct  BFu17ll_BFu7c_S  {
  __tsu64 v1:17;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu17ll_BFu7c_S) C1{ FL:17 Fc:7 Fs}



static void Test_BFu17ll_BFu7c_S()
{
  {
    init_simple_test("BFu17ll_BFu7c_S");
    static STRUCT_IF_C BFu17ll_BFu7c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_S, BFu17ll_BFu7c_S)
//============================================================================


struct  BFu17ll_BFu7c_Uc  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu7c_Uc) C1{ FL:17 Fc:7 Fc}



static void Test_BFu17ll_BFu7c_Uc()
{
  {
    init_simple_test("BFu17ll_BFu7c_Uc");
    static STRUCT_IF_C BFu17ll_BFu7c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Uc, BFu17ll_BFu7c_Uc)
//============================================================================


struct  BFu17ll_BFu7c_Ui  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu7c_Ui) C1{ FL:17 Fc:7 Fi}



static void Test_BFu17ll_BFu7c_Ui()
{
  {
    init_simple_test("BFu17ll_BFu7c_Ui");
    static STRUCT_IF_C BFu17ll_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Ui, BFu17ll_BFu7c_Ui)
//============================================================================


struct  BFu17ll_BFu7c_Ul  {
  __tsu64 v1:17;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu7c_Ul) C1{ FL:17 Fc:7 FL}



static void Test_BFu17ll_BFu7c_Ul()
{
  {
    init_simple_test("BFu17ll_BFu7c_Ul");
    static STRUCT_IF_C BFu17ll_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Ul, BFu17ll_BFu7c_Ul)
//============================================================================


struct  BFu17ll_BFu7c_Us  {
  __tsu64 v1:17;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu7c_Us) C1{ FL:17 Fc:7 Fs}



static void Test_BFu17ll_BFu7c_Us()
{
  {
    init_simple_test("BFu17ll_BFu7c_Us");
    static STRUCT_IF_C BFu17ll_BFu7c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Us, BFu17ll_BFu7c_Us)
//============================================================================


struct  BFu17ll_BFu7c_Vp  {
  __tsu64 v1:17;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu17ll_BFu7c_Vp) C1{ FL:17 Fc:7 Fp}



static void Test_BFu17ll_BFu7c_Vp()
{
  {
    init_simple_test("BFu17ll_BFu7c_Vp");
    static STRUCT_IF_C BFu17ll_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7c_Vp, BFu17ll_BFu7c_Vp)
//============================================================================


struct  BFu17ll_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu17ll_BFu7i) C1{ FL:17 Fi:7}



static void Test_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i, BFu17ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu7i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu7i_BFu15i) C1{ FL:17 Fi:7 Fi:15}



static void Test_BFu17ll_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu15i, BFu17ll_BFu7i_BFu15i)
//============================================================================


struct  BFu17ll_BFu7i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu7i_BFu15ll) C1{ FL:17 Fi:7 FL:15}



static void Test_BFu17ll_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu15ll, BFu17ll_BFu7i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu7i_BFu15s) C1{ FL:17 Fi:7 Fs:15}



static void Test_BFu17ll_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu15s, BFu17ll_BFu7i_BFu15s)
//============================================================================


struct  BFu17ll_BFu7i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu7i_BFu16i) C1{ FL:17 Fi:7 Fi:16}



static void Test_BFu17ll_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu16i, BFu17ll_BFu7i_BFu16i)
//============================================================================


struct  BFu17ll_BFu7i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu7i_BFu16ll) C1{ FL:17 Fi:7 FL:16}



static void Test_BFu17ll_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu16ll, BFu17ll_BFu7i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu7i_BFu16s) C1{ FL:17 Fi:7 Fs:16}



static void Test_BFu17ll_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu16s, BFu17ll_BFu7i_BFu16s)
//============================================================================


struct  BFu17ll_BFu7i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu7i_BFu17i) C1{ FL:17 Fi:7 Fi:17}



static void Test_BFu17ll_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu17i, BFu17ll_BFu7i_BFu17i)
//============================================================================


struct  BFu17ll_BFu7i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu7i_BFu17ll) C1{ FL:17 Fi:7 FL:17}



static void Test_BFu17ll_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17ll_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu17ll, BFu17ll_BFu7i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu7i_BFu1c) C1{ FL:17 Fi:7 Fc:1}



static void Test_BFu17ll_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu1c, BFu17ll_BFu7i_BFu1c)
//============================================================================


struct  BFu17ll_BFu7i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu7i_BFu1i) C1{ FL:17 Fi:7 Fi:1}



static void Test_BFu17ll_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu1i, BFu17ll_BFu7i_BFu1i)
//============================================================================


struct  BFu17ll_BFu7i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu7i_BFu1ll) C1{ FL:17 Fi:7 FL:1}



static void Test_BFu17ll_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu1ll, BFu17ll_BFu7i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu7i_BFu1s) C1{ FL:17 Fi:7 Fs:1}



static void Test_BFu17ll_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu1s, BFu17ll_BFu7i_BFu1s)
//============================================================================


struct  BFu17ll_BFu7i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu7i_BFu31i) C1{ FL:17 Fi:7 Fi:31}



static void Test_BFu17ll_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu31i, BFu17ll_BFu7i_BFu31i)
//============================================================================


struct  BFu17ll_BFu7i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu7i_BFu31ll) C1{ FL:17 Fi:7 FL:31}



static void Test_BFu17ll_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17ll_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu31ll, BFu17ll_BFu7i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu7i_BFu32i) C1{ FL:17 Fi:7 Fi:32}



static void Test_BFu17ll_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu32i, BFu17ll_BFu7i_BFu32i)
//============================================================================


struct  BFu17ll_BFu7i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu7i_BFu32ll) C1{ FL:17 Fi:7 FL:32}



static void Test_BFu17ll_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17ll_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu32ll, BFu17ll_BFu7i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu7i_BFu33) C1{ FL:17 Fi:7 FL:33}



static void Test_BFu17ll_BFu7i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17ll_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu33, BFu17ll_BFu7i_BFu33)
//============================================================================


struct  BFu17ll_BFu7i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu7i_BFu7c) C1{ FL:17 Fi:7 Fc:7}



static void Test_BFu17ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu7c, BFu17ll_BFu7i_BFu7c)
//============================================================================


struct  BFu17ll_BFu7i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu7i_BFu7i) C1{ FL:17 Fi:7 Fi:7}



static void Test_BFu17ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu7i, BFu17ll_BFu7i_BFu7i)
//============================================================================


struct  BFu17ll_BFu7i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu7i_BFu7ll) C1{ FL:17 Fi:7 FL:7}



static void Test_BFu17ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu7ll, BFu17ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu7i_BFu7s) C1{ FL:17 Fi:7 Fs:7}



static void Test_BFu17ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu7s, BFu17ll_BFu7i_BFu7s)
//============================================================================


struct  BFu17ll_BFu7i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu7i_BFu8c) C1{ FL:17 Fi:7 Fc:8}



static void Test_BFu17ll_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu8c, BFu17ll_BFu7i_BFu8c)
//============================================================================


struct  BFu17ll_BFu7i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu7i_BFu8i) C1{ FL:17 Fi:7 Fi:8}



static void Test_BFu17ll_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu8i, BFu17ll_BFu7i_BFu8i)
//============================================================================


struct  BFu17ll_BFu7i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu7i_BFu8ll) C1{ FL:17 Fi:7 FL:8}



static void Test_BFu17ll_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu8ll, BFu17ll_BFu7i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu7i_BFu8s) C1{ FL:17 Fi:7 Fs:8}



static void Test_BFu17ll_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu8s, BFu17ll_BFu7i_BFu8s)
//============================================================================


struct  BFu17ll_BFu7i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu7i_BFu9i) C1{ FL:17 Fi:7 Fi:9}



static void Test_BFu17ll_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu9i, BFu17ll_BFu7i_BFu9i)
//============================================================================


struct  BFu17ll_BFu7i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu7i_BFu9ll) C1{ FL:17 Fi:7 FL:9}



static void Test_BFu17ll_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17ll_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu9ll, BFu17ll_BFu7i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu7i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu7i_BFu9s) C1{ FL:17 Fi:7 Fs:9}



static void Test_BFu17ll_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu7i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu7i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_BFu9s, BFu17ll_BFu7i_BFu9s)
//============================================================================


struct  BFu17ll_BFu7i_C  {
  __tsu64 v1:17;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu17ll_BFu7i_C) C1{ FL:17 Fi:7 Fc}



static void Test_BFu17ll_BFu7i_C()
{
  {
    init_simple_test("BFu17ll_BFu7i_C");
    static STRUCT_IF_C BFu17ll_BFu7i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_C, BFu17ll_BFu7i_C)
//============================================================================


struct  BFu17ll_BFu7i_D  {
  __tsu64 v1:17;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu17ll_BFu7i_D) C1{ FL:17 Fi:7 FL}



static void Test_BFu17ll_BFu7i_D()
{
  {
    init_simple_test("BFu17ll_BFu7i_D");
    static STRUCT_IF_C BFu17ll_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_D, BFu17ll_BFu7i_D)
//============================================================================


struct  BFu17ll_BFu7i_F  {
  __tsu64 v1:17;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu17ll_BFu7i_F) C1{ FL:17 Fi:7 Fi}



static void Test_BFu17ll_BFu7i_F()
{
  {
    init_simple_test("BFu17ll_BFu7i_F");
    static STRUCT_IF_C BFu17ll_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_F, BFu17ll_BFu7i_F)
//============================================================================


struct  BFu17ll_BFu7i_I  {
  __tsu64 v1:17;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu17ll_BFu7i_I) C1{ FL:17 Fi:7 Fi}



static void Test_BFu17ll_BFu7i_I()
{
  {
    init_simple_test("BFu17ll_BFu7i_I");
    static STRUCT_IF_C BFu17ll_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_I, BFu17ll_BFu7i_I)
//============================================================================


struct  BFu17ll_BFu7i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu17ll_BFu7i_Ip) C1{ FL:17 Fi:7 Fp}



static void Test_BFu17ll_BFu7i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu7i_Ip");
    static STRUCT_IF_C BFu17ll_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Ip, BFu17ll_BFu7i_Ip)
//============================================================================


struct  BFu17ll_BFu7i_L  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu7i_L) C1{ FL:17 Fi:7 FL}



static void Test_BFu17ll_BFu7i_L()
{
  {
    init_simple_test("BFu17ll_BFu7i_L");
    static STRUCT_IF_C BFu17ll_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_L, BFu17ll_BFu7i_L)
//============================================================================


struct  BFu17ll_BFu7i_S  {
  __tsu64 v1:17;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu17ll_BFu7i_S) C1{ FL:17 Fi:7 Fs}



static void Test_BFu17ll_BFu7i_S()
{
  {
    init_simple_test("BFu17ll_BFu7i_S");
    static STRUCT_IF_C BFu17ll_BFu7i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_S, BFu17ll_BFu7i_S)
//============================================================================


struct  BFu17ll_BFu7i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu7i_Uc) C1{ FL:17 Fi:7 Fc}



static void Test_BFu17ll_BFu7i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu7i_Uc");
    static STRUCT_IF_C BFu17ll_BFu7i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Uc, BFu17ll_BFu7i_Uc)
//============================================================================


struct  BFu17ll_BFu7i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu7i_Ui) C1{ FL:17 Fi:7 Fi}



static void Test_BFu17ll_BFu7i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu7i_Ui");
    static STRUCT_IF_C BFu17ll_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Ui, BFu17ll_BFu7i_Ui)
//============================================================================


struct  BFu17ll_BFu7i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu7i_Ul) C1{ FL:17 Fi:7 FL}



static void Test_BFu17ll_BFu7i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu7i_Ul");
    static STRUCT_IF_C BFu17ll_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Ul, BFu17ll_BFu7i_Ul)
//============================================================================


struct  BFu17ll_BFu7i_Us  {
  __tsu64 v1:17;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu7i_Us) C1{ FL:17 Fi:7 Fs}



static void Test_BFu17ll_BFu7i_Us()
{
  {
    init_simple_test("BFu17ll_BFu7i_Us");
    static STRUCT_IF_C BFu17ll_BFu7i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Us, BFu17ll_BFu7i_Us)
//============================================================================


struct  BFu17ll_BFu7i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu17ll_BFu7i_Vp) C1{ FL:17 Fi:7 Fp}



static void Test_BFu17ll_BFu7i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu7i_Vp");
    static STRUCT_IF_C BFu17ll_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7i_Vp, BFu17ll_BFu7i_Vp)
//============================================================================


struct  BFu17ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu17ll_BFu7ll) C1{ FL:17 FL:7}



static void Test_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll, BFu17ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu7ll_BFu15i) C1{ FL:17 FL:7 Fi:15}



static void Test_BFu17ll_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu15i, BFu17ll_BFu7ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu7ll_BFu15ll) C1{ FL:17 FL:7 FL:15}



static void Test_BFu17ll_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17ll_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu15ll, BFu17ll_BFu7ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu7ll_BFu15s) C1{ FL:17 FL:7 Fs:15}



static void Test_BFu17ll_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu15s, BFu17ll_BFu7ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu7ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu7ll_BFu16i) C1{ FL:17 FL:7 Fi:16}



static void Test_BFu17ll_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu16i, BFu17ll_BFu7ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu7ll_BFu16ll) C1{ FL:17 FL:7 FL:16}



static void Test_BFu17ll_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17ll_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu16ll, BFu17ll_BFu7ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu7ll_BFu16s) C1{ FL:17 FL:7 Fs:16}



static void Test_BFu17ll_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu16s, BFu17ll_BFu7ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu7ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu7ll_BFu17i) C1{ FL:17 FL:7 Fi:17}



static void Test_BFu17ll_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu17i, BFu17ll_BFu7ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu7ll_BFu17ll) C1{ FL:17 FL:7 FL:17}



static void Test_BFu17ll_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17ll_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu17ll, BFu17ll_BFu7ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu7ll_BFu1c) C1{ FL:17 FL:7 Fc:1}



static void Test_BFu17ll_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu1c, BFu17ll_BFu7ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu7ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu7ll_BFu1i) C1{ FL:17 FL:7 Fi:1}



static void Test_BFu17ll_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu1i, BFu17ll_BFu7ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu7ll_BFu1ll) C1{ FL:17 FL:7 FL:1}



static void Test_BFu17ll_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu1ll, BFu17ll_BFu7ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu7ll_BFu1s) C1{ FL:17 FL:7 Fs:1}



static void Test_BFu17ll_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu1s, BFu17ll_BFu7ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu7ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu7ll_BFu31i) C1{ FL:17 FL:7 Fi:31}



static void Test_BFu17ll_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu31i, BFu17ll_BFu7ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu7ll_BFu31ll) C1{ FL:17 FL:7 FL:31}



static void Test_BFu17ll_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17ll_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu31ll, BFu17ll_BFu7ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu7ll_BFu32i) C1{ FL:17 FL:7 Fi:32}



static void Test_BFu17ll_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu32i, BFu17ll_BFu7ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu7ll_BFu32ll) C1{ FL:17 FL:7 FL:32}



static void Test_BFu17ll_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17ll_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu32ll, BFu17ll_BFu7ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu7ll_BFu33) C1{ FL:17 FL:7 FL:33}



static void Test_BFu17ll_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17ll_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu33, BFu17ll_BFu7ll_BFu33)
//============================================================================


struct  BFu17ll_BFu7ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu7ll_BFu7c) C1{ FL:17 FL:7 Fc:7}



static void Test_BFu17ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu7c, BFu17ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu7ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu7ll_BFu7i) C1{ FL:17 FL:7 Fi:7}



static void Test_BFu17ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu7i, BFu17ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu7ll_BFu7ll) C1{ FL:17 FL:7 FL:7}



static void Test_BFu17ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu7ll, BFu17ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu7ll_BFu7s) C1{ FL:17 FL:7 Fs:7}



static void Test_BFu17ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu7s, BFu17ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu7ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu7ll_BFu8c) C1{ FL:17 FL:7 Fc:8}



static void Test_BFu17ll_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu8c, BFu17ll_BFu7ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu7ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu7ll_BFu8i) C1{ FL:17 FL:7 Fi:8}



static void Test_BFu17ll_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu8i, BFu17ll_BFu7ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu7ll_BFu8ll) C1{ FL:17 FL:7 FL:8}



static void Test_BFu17ll_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu8ll, BFu17ll_BFu7ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu7ll_BFu8s) C1{ FL:17 FL:7 Fs:8}



static void Test_BFu17ll_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu8s, BFu17ll_BFu7ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu7ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu7ll_BFu9i) C1{ FL:17 FL:7 Fi:9}



static void Test_BFu17ll_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu9i, BFu17ll_BFu7ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu7ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu7ll_BFu9ll) C1{ FL:17 FL:7 FL:9}



static void Test_BFu17ll_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17ll_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu9ll, BFu17ll_BFu7ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu7ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu7ll_BFu9s) C1{ FL:17 FL:7 Fs:9}



static void Test_BFu17ll_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu7ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_BFu9s, BFu17ll_BFu7ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu7ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu17ll_BFu7ll_C) C1{ FL:17 FL:7 Fc}



static void Test_BFu17ll_BFu7ll_C()
{
  {
    init_simple_test("BFu17ll_BFu7ll_C");
    static STRUCT_IF_C BFu17ll_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_C, BFu17ll_BFu7ll_C)
//============================================================================


struct  BFu17ll_BFu7ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu17ll_BFu7ll_D) C1{ FL:17 FL:7 FL}



static void Test_BFu17ll_BFu7ll_D()
{
  {
    init_simple_test("BFu17ll_BFu7ll_D");
    static STRUCT_IF_C BFu17ll_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_D, BFu17ll_BFu7ll_D)
//============================================================================


struct  BFu17ll_BFu7ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu17ll_BFu7ll_F) C1{ FL:17 FL:7 Fi}



static void Test_BFu17ll_BFu7ll_F()
{
  {
    init_simple_test("BFu17ll_BFu7ll_F");
    static STRUCT_IF_C BFu17ll_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_F, BFu17ll_BFu7ll_F)
//============================================================================


struct  BFu17ll_BFu7ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu17ll_BFu7ll_I) C1{ FL:17 FL:7 Fi}



static void Test_BFu17ll_BFu7ll_I()
{
  {
    init_simple_test("BFu17ll_BFu7ll_I");
    static STRUCT_IF_C BFu17ll_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_I, BFu17ll_BFu7ll_I)
//============================================================================


struct  BFu17ll_BFu7ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu17ll_BFu7ll_Ip) C1{ FL:17 FL:7 Fp}



static void Test_BFu17ll_BFu7ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Ip, BFu17ll_BFu7ll_Ip)
//============================================================================


struct  BFu17ll_BFu7ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu7ll_L) C1{ FL:17 FL:7 FL}



static void Test_BFu17ll_BFu7ll_L()
{
  {
    init_simple_test("BFu17ll_BFu7ll_L");
    static STRUCT_IF_C BFu17ll_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_L, BFu17ll_BFu7ll_L)
//============================================================================


struct  BFu17ll_BFu7ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu17ll_BFu7ll_S) C1{ FL:17 FL:7 Fs}



static void Test_BFu17ll_BFu7ll_S()
{
  {
    init_simple_test("BFu17ll_BFu7ll_S");
    static STRUCT_IF_C BFu17ll_BFu7ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_S, BFu17ll_BFu7ll_S)
//============================================================================


struct  BFu17ll_BFu7ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu7ll_Uc) C1{ FL:17 FL:7 Fc}



static void Test_BFu17ll_BFu7ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Uc, BFu17ll_BFu7ll_Uc)
//============================================================================


struct  BFu17ll_BFu7ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu7ll_Ui) C1{ FL:17 FL:7 Fi}



static void Test_BFu17ll_BFu7ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Ui, BFu17ll_BFu7ll_Ui)
//============================================================================


struct  BFu17ll_BFu7ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu7ll_Ul) C1{ FL:17 FL:7 FL}



static void Test_BFu17ll_BFu7ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Ul, BFu17ll_BFu7ll_Ul)
//============================================================================


struct  BFu17ll_BFu7ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu7ll_Us) C1{ FL:17 FL:7 Fs}



static void Test_BFu17ll_BFu7ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Us");
    static STRUCT_IF_C BFu17ll_BFu7ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Us, BFu17ll_BFu7ll_Us)
//============================================================================


struct  BFu17ll_BFu7ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu17ll_BFu7ll_Vp) C1{ FL:17 FL:7 Fp}



static void Test_BFu17ll_BFu7ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu7ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7ll_Vp, BFu17ll_BFu7ll_Vp)
//============================================================================


struct  BFu17ll_BFu7s  {
  __tsu64 v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu17ll_BFu7s) C1{ FL:17 Fs:7}



static void Test_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s, BFu17ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu7s_BFu15i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu7s_BFu15i) C1{ FL:17 Fs:7 Fi:15}



static void Test_BFu17ll_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu15i, BFu17ll_BFu7s_BFu15i)
//============================================================================


struct  BFu17ll_BFu7s_BFu15ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu7s_BFu15ll) C1{ FL:17 Fs:7 FL:15}



static void Test_BFu17ll_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu17ll_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu15ll, BFu17ll_BFu7s_BFu15ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu7s_BFu15s) C1{ FL:17 Fs:7 Fs:15}



static void Test_BFu17ll_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu15s, BFu17ll_BFu7s_BFu15s)
//============================================================================


struct  BFu17ll_BFu7s_BFu16i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu7s_BFu16i) C1{ FL:17 Fs:7 Fi:16}



static void Test_BFu17ll_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu16i, BFu17ll_BFu7s_BFu16i)
//============================================================================


struct  BFu17ll_BFu7s_BFu16ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu7s_BFu16ll) C1{ FL:17 Fs:7 FL:16}



static void Test_BFu17ll_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu17ll_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu16ll, BFu17ll_BFu7s_BFu16ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu7s_BFu16s) C1{ FL:17 Fs:7 Fs:16}



static void Test_BFu17ll_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu16s, BFu17ll_BFu7s_BFu16s)
//============================================================================


struct  BFu17ll_BFu7s_BFu17i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu7s_BFu17i) C1{ FL:17 Fs:7 Fi:17}



static void Test_BFu17ll_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu17i, BFu17ll_BFu7s_BFu17i)
//============================================================================


struct  BFu17ll_BFu7s_BFu17ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu7s_BFu17ll) C1{ FL:17 Fs:7 FL:17}



static void Test_BFu17ll_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu17ll_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu17ll, BFu17ll_BFu7s_BFu17ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu1c  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu7s_BFu1c) C1{ FL:17 Fs:7 Fc:1}



static void Test_BFu17ll_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu1c, BFu17ll_BFu7s_BFu1c)
//============================================================================


struct  BFu17ll_BFu7s_BFu1i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu7s_BFu1i) C1{ FL:17 Fs:7 Fi:1}



static void Test_BFu17ll_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu1i, BFu17ll_BFu7s_BFu1i)
//============================================================================


struct  BFu17ll_BFu7s_BFu1ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu7s_BFu1ll) C1{ FL:17 Fs:7 FL:1}



static void Test_BFu17ll_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu1ll, BFu17ll_BFu7s_BFu1ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu7s_BFu1s) C1{ FL:17 Fs:7 Fs:1}



static void Test_BFu17ll_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu17ll_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu1s, BFu17ll_BFu7s_BFu1s)
//============================================================================


struct  BFu17ll_BFu7s_BFu31i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu7s_BFu31i) C1{ FL:17 Fs:7 Fi:31}



static void Test_BFu17ll_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu31i, BFu17ll_BFu7s_BFu31i)
//============================================================================


struct  BFu17ll_BFu7s_BFu31ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu7s_BFu31ll) C1{ FL:17 Fs:7 FL:31}



static void Test_BFu17ll_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu17ll_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu31ll, BFu17ll_BFu7s_BFu31ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu32i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu7s_BFu32i) C1{ FL:17 Fs:7 Fi:32}



static void Test_BFu17ll_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu32i, BFu17ll_BFu7s_BFu32i)
//============================================================================


struct  BFu17ll_BFu7s_BFu32ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu7s_BFu32ll) C1{ FL:17 Fs:7 FL:32}



static void Test_BFu17ll_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu17ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu32ll, BFu17ll_BFu7s_BFu32ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu33  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu7s_BFu33) C1{ FL:17 Fs:7 FL:33}



static void Test_BFu17ll_BFu7s_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu33");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu17ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu33, BFu17ll_BFu7s_BFu33)
//============================================================================


struct  BFu17ll_BFu7s_BFu7c  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu7s_BFu7c) C1{ FL:17 Fs:7 Fc:7}



static void Test_BFu17ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu7c, BFu17ll_BFu7s_BFu7c)
//============================================================================


struct  BFu17ll_BFu7s_BFu7i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu7s_BFu7i) C1{ FL:17 Fs:7 Fi:7}



static void Test_BFu17ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu7i, BFu17ll_BFu7s_BFu7i)
//============================================================================


struct  BFu17ll_BFu7s_BFu7ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu7s_BFu7ll) C1{ FL:17 Fs:7 FL:7}



static void Test_BFu17ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu7ll, BFu17ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu7s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu7s_BFu7s) C1{ FL:17 Fs:7 Fs:7}



static void Test_BFu17ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu17ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu7s, BFu17ll_BFu7s_BFu7s)
//============================================================================


struct  BFu17ll_BFu7s_BFu8c  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu7s_BFu8c) C1{ FL:17 Fs:7 Fc:8}



static void Test_BFu17ll_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu8c, BFu17ll_BFu7s_BFu8c)
//============================================================================


struct  BFu17ll_BFu7s_BFu8i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu7s_BFu8i) C1{ FL:17 Fs:7 Fi:8}



static void Test_BFu17ll_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu8i, BFu17ll_BFu7s_BFu8i)
//============================================================================


struct  BFu17ll_BFu7s_BFu8ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu7s_BFu8ll) C1{ FL:17 Fs:7 FL:8}



static void Test_BFu17ll_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu8ll, BFu17ll_BFu7s_BFu8ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu8s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu7s_BFu8s) C1{ FL:17 Fs:7 Fs:8}



static void Test_BFu17ll_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu17ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu8s, BFu17ll_BFu7s_BFu8s)
//============================================================================


struct  BFu17ll_BFu7s_BFu9i  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu7s_BFu9i) C1{ FL:17 Fs:7 Fi:9}



static void Test_BFu17ll_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu9i, BFu17ll_BFu7s_BFu9i)
//============================================================================


struct  BFu17ll_BFu7s_BFu9ll  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu7s_BFu9ll) C1{ FL:17 Fs:7 FL:9}



static void Test_BFu17ll_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu17ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu9ll, BFu17ll_BFu7s_BFu9ll)
//============================================================================


struct  BFu17ll_BFu7s_BFu9s  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu7s_BFu9s) C1{ FL:17 Fs:7 Fs:9}



static void Test_BFu17ll_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu7s_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu7s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_BFu9s, BFu17ll_BFu7s_BFu9s)
//============================================================================


struct  BFu17ll_BFu7s_C  {
  __tsu64 v1:17;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu17ll_BFu7s_C) C1{ FL:17 Fs:7 Fc}



static void Test_BFu17ll_BFu7s_C()
{
  {
    init_simple_test("BFu17ll_BFu7s_C");
    static STRUCT_IF_C BFu17ll_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_C");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_C, BFu17ll_BFu7s_C)
//============================================================================


struct  BFu17ll_BFu7s_D  {
  __tsu64 v1:17;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu17ll_BFu7s_D) C1{ FL:17 Fs:7 FL}



static void Test_BFu17ll_BFu7s_D()
{
  {
    init_simple_test("BFu17ll_BFu7s_D");
    static STRUCT_IF_C BFu17ll_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_D, BFu17ll_BFu7s_D)
//============================================================================


struct  BFu17ll_BFu7s_F  {
  __tsu64 v1:17;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu17ll_BFu7s_F) C1{ FL:17 Fs:7 Fi}



static void Test_BFu17ll_BFu7s_F()
{
  {
    init_simple_test("BFu17ll_BFu7s_F");
    static STRUCT_IF_C BFu17ll_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_F, BFu17ll_BFu7s_F)
//============================================================================


struct  BFu17ll_BFu7s_I  {
  __tsu64 v1:17;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu17ll_BFu7s_I) C1{ FL:17 Fs:7 Fi}



static void Test_BFu17ll_BFu7s_I()
{
  {
    init_simple_test("BFu17ll_BFu7s_I");
    static STRUCT_IF_C BFu17ll_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_I, BFu17ll_BFu7s_I)
//============================================================================


struct  BFu17ll_BFu7s_Ip  {
  __tsu64 v1:17;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu17ll_BFu7s_Ip) C1{ FL:17 Fs:7 Fp}



static void Test_BFu17ll_BFu7s_Ip()
{
  {
    init_simple_test("BFu17ll_BFu7s_Ip");
    static STRUCT_IF_C BFu17ll_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Ip, BFu17ll_BFu7s_Ip)
//============================================================================


struct  BFu17ll_BFu7s_L  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu7s_L) C1{ FL:17 Fs:7 FL}



static void Test_BFu17ll_BFu7s_L()
{
  {
    init_simple_test("BFu17ll_BFu7s_L");
    static STRUCT_IF_C BFu17ll_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_L, BFu17ll_BFu7s_L)
//============================================================================


struct  BFu17ll_BFu7s_S  {
  __tsu64 v1:17;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu17ll_BFu7s_S) C1{ FL:17 Fs:7 Fs}



static void Test_BFu17ll_BFu7s_S()
{
  {
    init_simple_test("BFu17ll_BFu7s_S");
    static STRUCT_IF_C BFu17ll_BFu7s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_S, BFu17ll_BFu7s_S)
//============================================================================


struct  BFu17ll_BFu7s_Uc  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu7s_Uc) C1{ FL:17 Fs:7 Fc}



static void Test_BFu17ll_BFu7s_Uc()
{
  {
    init_simple_test("BFu17ll_BFu7s_Uc");
    static STRUCT_IF_C BFu17ll_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Uc");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Uc, BFu17ll_BFu7s_Uc)
//============================================================================


struct  BFu17ll_BFu7s_Ui  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu7s_Ui) C1{ FL:17 Fs:7 Fi}



static void Test_BFu17ll_BFu7s_Ui()
{
  {
    init_simple_test("BFu17ll_BFu7s_Ui");
    static STRUCT_IF_C BFu17ll_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Ui, BFu17ll_BFu7s_Ui)
//============================================================================


struct  BFu17ll_BFu7s_Ul  {
  __tsu64 v1:17;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu7s_Ul) C1{ FL:17 Fs:7 FL}



static void Test_BFu17ll_BFu7s_Ul()
{
  {
    init_simple_test("BFu17ll_BFu7s_Ul");
    static STRUCT_IF_C BFu17ll_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Ul, BFu17ll_BFu7s_Ul)
//============================================================================


struct  BFu17ll_BFu7s_Us  {
  __tsu64 v1:17;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu7s_Us) C1{ FL:17 Fs:7 Fs}



static void Test_BFu17ll_BFu7s_Us()
{
  {
    init_simple_test("BFu17ll_BFu7s_Us");
    static STRUCT_IF_C BFu17ll_BFu7s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu7s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Us, BFu17ll_BFu7s_Us)
//============================================================================


struct  BFu17ll_BFu7s_Vp  {
  __tsu64 v1:17;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu17ll_BFu7s_Vp) C1{ FL:17 Fs:7 Fp}



static void Test_BFu17ll_BFu7s_Vp()
{
  {
    init_simple_test("BFu17ll_BFu7s_Vp");
    static STRUCT_IF_C BFu17ll_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu7s_Vp, BFu17ll_BFu7s_Vp)
//============================================================================


struct  BFu17ll_BFu8c  {
  __tsu64 v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu17ll_BFu8c) C1{ FL:17 Fc:8}



static void Test_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c, BFu17ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu8c_BFu15i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu8c_BFu15i) C1{ FL:17 Fc:8 Fi:15}



static void Test_BFu17ll_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu15i, BFu17ll_BFu8c_BFu15i)
//============================================================================


struct  BFu17ll_BFu8c_BFu15ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu8c_BFu15ll) C1{ FL:17 Fc:8 FL:15}



static void Test_BFu17ll_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu15ll, BFu17ll_BFu8c_BFu15ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu15s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu8c_BFu15s) C1{ FL:17 Fc:8 Fs:15}



static void Test_BFu17ll_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu15s, BFu17ll_BFu8c_BFu15s)
//============================================================================


struct  BFu17ll_BFu8c_BFu16i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu8c_BFu16i) C1{ FL:17 Fc:8 Fi:16}



static void Test_BFu17ll_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu16i, BFu17ll_BFu8c_BFu16i)
//============================================================================


struct  BFu17ll_BFu8c_BFu16ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu8c_BFu16ll) C1{ FL:17 Fc:8 FL:16}



static void Test_BFu17ll_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu16ll, BFu17ll_BFu8c_BFu16ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu16s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu8c_BFu16s) C1{ FL:17 Fc:8 Fs:16}



static void Test_BFu17ll_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu16s, BFu17ll_BFu8c_BFu16s)
//============================================================================


struct  BFu17ll_BFu8c_BFu17i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu8c_BFu17i) C1{ FL:17 Fc:8 Fi:17}



static void Test_BFu17ll_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu17i, BFu17ll_BFu8c_BFu17i)
//============================================================================


struct  BFu17ll_BFu8c_BFu17ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu8c_BFu17ll) C1{ FL:17 Fc:8 FL:17}



static void Test_BFu17ll_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu17ll, BFu17ll_BFu8c_BFu17ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu1c  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu8c_BFu1c) C1{ FL:17 Fc:8 Fc:1}



static void Test_BFu17ll_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu1c, BFu17ll_BFu8c_BFu1c)
//============================================================================


struct  BFu17ll_BFu8c_BFu1i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu8c_BFu1i) C1{ FL:17 Fc:8 Fi:1}



static void Test_BFu17ll_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu1i, BFu17ll_BFu8c_BFu1i)
//============================================================================


struct  BFu17ll_BFu8c_BFu1ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu8c_BFu1ll) C1{ FL:17 Fc:8 FL:1}



static void Test_BFu17ll_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu1ll, BFu17ll_BFu8c_BFu1ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu1s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu8c_BFu1s) C1{ FL:17 Fc:8 Fs:1}



static void Test_BFu17ll_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu1s, BFu17ll_BFu8c_BFu1s)
//============================================================================


struct  BFu17ll_BFu8c_BFu31i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu8c_BFu31i) C1{ FL:17 Fc:8 Fi:31}



static void Test_BFu17ll_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu31i, BFu17ll_BFu8c_BFu31i)
//============================================================================


struct  BFu17ll_BFu8c_BFu31ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu8c_BFu31ll) C1{ FL:17 Fc:8 FL:31}



static void Test_BFu17ll_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu31ll, BFu17ll_BFu8c_BFu31ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu32i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu8c_BFu32i) C1{ FL:17 Fc:8 Fi:32}



static void Test_BFu17ll_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu32i, BFu17ll_BFu8c_BFu32i)
//============================================================================


struct  BFu17ll_BFu8c_BFu32ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu8c_BFu32ll) C1{ FL:17 Fc:8 FL:32}



static void Test_BFu17ll_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu32ll, BFu17ll_BFu8c_BFu32ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu33  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu8c_BFu33) C1{ FL:17 Fc:8 FL:33}



static void Test_BFu17ll_BFu8c_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu33");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17ll_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu33, BFu17ll_BFu8c_BFu33)
//============================================================================


struct  BFu17ll_BFu8c_BFu7c  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu8c_BFu7c) C1{ FL:17 Fc:8 Fc:7}



static void Test_BFu17ll_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu7c, BFu17ll_BFu8c_BFu7c)
//============================================================================


struct  BFu17ll_BFu8c_BFu7i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu8c_BFu7i) C1{ FL:17 Fc:8 Fi:7}



static void Test_BFu17ll_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu7i, BFu17ll_BFu8c_BFu7i)
//============================================================================


struct  BFu17ll_BFu8c_BFu7ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu8c_BFu7ll) C1{ FL:17 Fc:8 FL:7}



static void Test_BFu17ll_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu7ll, BFu17ll_BFu8c_BFu7ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu7s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu8c_BFu7s) C1{ FL:17 Fc:8 Fs:7}



static void Test_BFu17ll_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu7s, BFu17ll_BFu8c_BFu7s)
//============================================================================


struct  BFu17ll_BFu8c_BFu8c  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu8c_BFu8c) C1{ FL:17 Fc:8 Fc:8}



static void Test_BFu17ll_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu8c, BFu17ll_BFu8c_BFu8c)
//============================================================================


struct  BFu17ll_BFu8c_BFu8i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu8c_BFu8i) C1{ FL:17 Fc:8 Fi:8}



static void Test_BFu17ll_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu8i, BFu17ll_BFu8c_BFu8i)
//============================================================================


struct  BFu17ll_BFu8c_BFu8ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu8c_BFu8ll) C1{ FL:17 Fc:8 FL:8}



static void Test_BFu17ll_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu8ll, BFu17ll_BFu8c_BFu8ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu8s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu8c_BFu8s) C1{ FL:17 Fc:8 Fs:8}



static void Test_BFu17ll_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu8s, BFu17ll_BFu8c_BFu8s)
//============================================================================


struct  BFu17ll_BFu8c_BFu9i  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu8c_BFu9i) C1{ FL:17 Fc:8 Fi:9}



static void Test_BFu17ll_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu9i, BFu17ll_BFu8c_BFu9i)
//============================================================================


struct  BFu17ll_BFu8c_BFu9ll  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu8c_BFu9ll) C1{ FL:17 Fc:8 FL:9}



static void Test_BFu17ll_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu9ll, BFu17ll_BFu8c_BFu9ll)
//============================================================================


struct  BFu17ll_BFu8c_BFu9s  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu8c_BFu9s) C1{ FL:17 Fc:8 Fs:9}



static void Test_BFu17ll_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu8c_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu8c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_BFu9s, BFu17ll_BFu8c_BFu9s)
//============================================================================


struct  BFu17ll_BFu8c_C  {
  __tsu64 v1:17;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu17ll_BFu8c_C) C1{ FL:17 Fc:8 Fc}



static void Test_BFu17ll_BFu8c_C()
{
  {
    init_simple_test("BFu17ll_BFu8c_C");
    static STRUCT_IF_C BFu17ll_BFu8c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_C");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_C");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_C, BFu17ll_BFu8c_C)
//============================================================================


struct  BFu17ll_BFu8c_D  {
  __tsu64 v1:17;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu17ll_BFu8c_D) C1{ FL:17 Fc:8 FL}



static void Test_BFu17ll_BFu8c_D()
{
  {
    init_simple_test("BFu17ll_BFu8c_D");
    static STRUCT_IF_C BFu17ll_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_D");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_D");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_D, BFu17ll_BFu8c_D)
//============================================================================


struct  BFu17ll_BFu8c_F  {
  __tsu64 v1:17;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu17ll_BFu8c_F) C1{ FL:17 Fc:8 Fi}



static void Test_BFu17ll_BFu8c_F()
{
  {
    init_simple_test("BFu17ll_BFu8c_F");
    static STRUCT_IF_C BFu17ll_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_F");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_F");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_F, BFu17ll_BFu8c_F)
//============================================================================


struct  BFu17ll_BFu8c_I  {
  __tsu64 v1:17;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu17ll_BFu8c_I) C1{ FL:17 Fc:8 Fi}



static void Test_BFu17ll_BFu8c_I()
{
  {
    init_simple_test("BFu17ll_BFu8c_I");
    static STRUCT_IF_C BFu17ll_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_I");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_I");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_I, BFu17ll_BFu8c_I)
//============================================================================


struct  BFu17ll_BFu8c_Ip  {
  __tsu64 v1:17;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu17ll_BFu8c_Ip) C1{ FL:17 Fc:8 Fp}



static void Test_BFu17ll_BFu8c_Ip()
{
  {
    init_simple_test("BFu17ll_BFu8c_Ip");
    static STRUCT_IF_C BFu17ll_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Ip, BFu17ll_BFu8c_Ip)
//============================================================================


struct  BFu17ll_BFu8c_L  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu8c_L) C1{ FL:17 Fc:8 FL}



static void Test_BFu17ll_BFu8c_L()
{
  {
    init_simple_test("BFu17ll_BFu8c_L");
    static STRUCT_IF_C BFu17ll_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_L");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_L");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_L, BFu17ll_BFu8c_L)
//============================================================================


struct  BFu17ll_BFu8c_S  {
  __tsu64 v1:17;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu17ll_BFu8c_S) C1{ FL:17 Fc:8 Fs}



static void Test_BFu17ll_BFu8c_S()
{
  {
    init_simple_test("BFu17ll_BFu8c_S");
    static STRUCT_IF_C BFu17ll_BFu8c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_S");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_S");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_S, BFu17ll_BFu8c_S)
//============================================================================


struct  BFu17ll_BFu8c_Uc  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu8c_Uc) C1{ FL:17 Fc:8 Fc}



static void Test_BFu17ll_BFu8c_Uc()
{
  {
    init_simple_test("BFu17ll_BFu8c_Uc");
    static STRUCT_IF_C BFu17ll_BFu8c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Uc, BFu17ll_BFu8c_Uc)
//============================================================================


struct  BFu17ll_BFu8c_Ui  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu8c_Ui) C1{ FL:17 Fc:8 Fi}



static void Test_BFu17ll_BFu8c_Ui()
{
  {
    init_simple_test("BFu17ll_BFu8c_Ui");
    static STRUCT_IF_C BFu17ll_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Ui, BFu17ll_BFu8c_Ui)
//============================================================================


struct  BFu17ll_BFu8c_Ul  {
  __tsu64 v1:17;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu8c_Ul) C1{ FL:17 Fc:8 FL}



static void Test_BFu17ll_BFu8c_Ul()
{
  {
    init_simple_test("BFu17ll_BFu8c_Ul");
    static STRUCT_IF_C BFu17ll_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Ul, BFu17ll_BFu8c_Ul)
//============================================================================


struct  BFu17ll_BFu8c_Us  {
  __tsu64 v1:17;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu8c_Us) C1{ FL:17 Fc:8 Fs}



static void Test_BFu17ll_BFu8c_Us()
{
  {
    init_simple_test("BFu17ll_BFu8c_Us");
    static STRUCT_IF_C BFu17ll_BFu8c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Us, BFu17ll_BFu8c_Us)
//============================================================================


struct  BFu17ll_BFu8c_Vp  {
  __tsu64 v1:17;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu17ll_BFu8c_Vp) C1{ FL:17 Fc:8 Fp}



static void Test_BFu17ll_BFu8c_Vp()
{
  {
    init_simple_test("BFu17ll_BFu8c_Vp");
    static STRUCT_IF_C BFu17ll_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8c_Vp, BFu17ll_BFu8c_Vp)
//============================================================================


struct  BFu17ll_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu17ll_BFu8i) C1{ FL:17 Fi:8}



static void Test_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i, BFu17ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu8i_BFu15i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu8i_BFu15i) C1{ FL:17 Fi:8 Fi:15}



static void Test_BFu17ll_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu15i, BFu17ll_BFu8i_BFu15i)
//============================================================================


struct  BFu17ll_BFu8i_BFu15ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu8i_BFu15ll) C1{ FL:17 Fi:8 FL:15}



static void Test_BFu17ll_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu15ll, BFu17ll_BFu8i_BFu15ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu15s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu8i_BFu15s) C1{ FL:17 Fi:8 Fs:15}



static void Test_BFu17ll_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu15s, BFu17ll_BFu8i_BFu15s)
//============================================================================


struct  BFu17ll_BFu8i_BFu16i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu8i_BFu16i) C1{ FL:17 Fi:8 Fi:16}



static void Test_BFu17ll_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu16i, BFu17ll_BFu8i_BFu16i)
//============================================================================


struct  BFu17ll_BFu8i_BFu16ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu8i_BFu16ll) C1{ FL:17 Fi:8 FL:16}



static void Test_BFu17ll_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu16ll, BFu17ll_BFu8i_BFu16ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu16s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu8i_BFu16s) C1{ FL:17 Fi:8 Fs:16}



static void Test_BFu17ll_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu16s, BFu17ll_BFu8i_BFu16s)
//============================================================================


struct  BFu17ll_BFu8i_BFu17i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu8i_BFu17i) C1{ FL:17 Fi:8 Fi:17}



static void Test_BFu17ll_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu17i, BFu17ll_BFu8i_BFu17i)
//============================================================================


struct  BFu17ll_BFu8i_BFu17ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu8i_BFu17ll) C1{ FL:17 Fi:8 FL:17}



static void Test_BFu17ll_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu17ll, BFu17ll_BFu8i_BFu17ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu1c  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu8i_BFu1c) C1{ FL:17 Fi:8 Fc:1}



static void Test_BFu17ll_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu1c, BFu17ll_BFu8i_BFu1c)
//============================================================================


struct  BFu17ll_BFu8i_BFu1i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu8i_BFu1i) C1{ FL:17 Fi:8 Fi:1}



static void Test_BFu17ll_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu1i, BFu17ll_BFu8i_BFu1i)
//============================================================================


struct  BFu17ll_BFu8i_BFu1ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu8i_BFu1ll) C1{ FL:17 Fi:8 FL:1}



static void Test_BFu17ll_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu1ll, BFu17ll_BFu8i_BFu1ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu1s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu8i_BFu1s) C1{ FL:17 Fi:8 Fs:1}



static void Test_BFu17ll_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu1s, BFu17ll_BFu8i_BFu1s)
//============================================================================


struct  BFu17ll_BFu8i_BFu31i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu8i_BFu31i) C1{ FL:17 Fi:8 Fi:31}



static void Test_BFu17ll_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu31i, BFu17ll_BFu8i_BFu31i)
//============================================================================


struct  BFu17ll_BFu8i_BFu31ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu8i_BFu31ll) C1{ FL:17 Fi:8 FL:31}



static void Test_BFu17ll_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu31ll, BFu17ll_BFu8i_BFu31ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu32i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu8i_BFu32i) C1{ FL:17 Fi:8 Fi:32}



static void Test_BFu17ll_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu32i, BFu17ll_BFu8i_BFu32i)
//============================================================================


struct  BFu17ll_BFu8i_BFu32ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu8i_BFu32ll) C1{ FL:17 Fi:8 FL:32}



static void Test_BFu17ll_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu32ll, BFu17ll_BFu8i_BFu32ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu33  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu8i_BFu33) C1{ FL:17 Fi:8 FL:33}



static void Test_BFu17ll_BFu8i_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu33");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu33, BFu17ll_BFu8i_BFu33)
//============================================================================


struct  BFu17ll_BFu8i_BFu7c  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu8i_BFu7c) C1{ FL:17 Fi:8 Fc:7}



static void Test_BFu17ll_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu7c, BFu17ll_BFu8i_BFu7c)
//============================================================================


struct  BFu17ll_BFu8i_BFu7i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu8i_BFu7i) C1{ FL:17 Fi:8 Fi:7}



static void Test_BFu17ll_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu7i, BFu17ll_BFu8i_BFu7i)
//============================================================================


struct  BFu17ll_BFu8i_BFu7ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu8i_BFu7ll) C1{ FL:17 Fi:8 FL:7}



static void Test_BFu17ll_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu7ll, BFu17ll_BFu8i_BFu7ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu7s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu8i_BFu7s) C1{ FL:17 Fi:8 Fs:7}



static void Test_BFu17ll_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu7s, BFu17ll_BFu8i_BFu7s)
//============================================================================


struct  BFu17ll_BFu8i_BFu8c  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu8i_BFu8c) C1{ FL:17 Fi:8 Fc:8}



static void Test_BFu17ll_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu8c, BFu17ll_BFu8i_BFu8c)
//============================================================================


struct  BFu17ll_BFu8i_BFu8i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu8i_BFu8i) C1{ FL:17 Fi:8 Fi:8}



static void Test_BFu17ll_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu8i, BFu17ll_BFu8i_BFu8i)
//============================================================================


struct  BFu17ll_BFu8i_BFu8ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu8i_BFu8ll) C1{ FL:17 Fi:8 FL:8}



static void Test_BFu17ll_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu17ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu8ll, BFu17ll_BFu8i_BFu8ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu8s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu8i_BFu8s) C1{ FL:17 Fi:8 Fs:8}



static void Test_BFu17ll_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu8s, BFu17ll_BFu8i_BFu8s)
//============================================================================


struct  BFu17ll_BFu8i_BFu9i  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu8i_BFu9i) C1{ FL:17 Fi:8 Fi:9}



static void Test_BFu17ll_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu9i, BFu17ll_BFu8i_BFu9i)
//============================================================================


struct  BFu17ll_BFu8i_BFu9ll  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu8i_BFu9ll) C1{ FL:17 Fi:8 FL:9}



static void Test_BFu17ll_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu17ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu9ll, BFu17ll_BFu8i_BFu9ll)
//============================================================================


struct  BFu17ll_BFu8i_BFu9s  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu8i_BFu9s) C1{ FL:17 Fi:8 Fs:9}



static void Test_BFu17ll_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu8i_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu8i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_BFu9s, BFu17ll_BFu8i_BFu9s)
//============================================================================


struct  BFu17ll_BFu8i_C  {
  __tsu64 v1:17;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu17ll_BFu8i_C) C1{ FL:17 Fi:8 Fc}



static void Test_BFu17ll_BFu8i_C()
{
  {
    init_simple_test("BFu17ll_BFu8i_C");
    static STRUCT_IF_C BFu17ll_BFu8i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_C, BFu17ll_BFu8i_C)
//============================================================================


struct  BFu17ll_BFu8i_D  {
  __tsu64 v1:17;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu17ll_BFu8i_D) C1{ FL:17 Fi:8 FL}



static void Test_BFu17ll_BFu8i_D()
{
  {
    init_simple_test("BFu17ll_BFu8i_D");
    static STRUCT_IF_C BFu17ll_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_D, BFu17ll_BFu8i_D)
//============================================================================


struct  BFu17ll_BFu8i_F  {
  __tsu64 v1:17;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu17ll_BFu8i_F) C1{ FL:17 Fi:8 Fi}



static void Test_BFu17ll_BFu8i_F()
{
  {
    init_simple_test("BFu17ll_BFu8i_F");
    static STRUCT_IF_C BFu17ll_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_F, BFu17ll_BFu8i_F)
//============================================================================


struct  BFu17ll_BFu8i_I  {
  __tsu64 v1:17;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu17ll_BFu8i_I) C1{ FL:17 Fi:8 Fi}



static void Test_BFu17ll_BFu8i_I()
{
  {
    init_simple_test("BFu17ll_BFu8i_I");
    static STRUCT_IF_C BFu17ll_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_I, BFu17ll_BFu8i_I)
//============================================================================


struct  BFu17ll_BFu8i_Ip  {
  __tsu64 v1:17;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu17ll_BFu8i_Ip) C1{ FL:17 Fi:8 Fp}



static void Test_BFu17ll_BFu8i_Ip()
{
  {
    init_simple_test("BFu17ll_BFu8i_Ip");
    static STRUCT_IF_C BFu17ll_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Ip, BFu17ll_BFu8i_Ip)
//============================================================================


struct  BFu17ll_BFu8i_L  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu8i_L) C1{ FL:17 Fi:8 FL}



static void Test_BFu17ll_BFu8i_L()
{
  {
    init_simple_test("BFu17ll_BFu8i_L");
    static STRUCT_IF_C BFu17ll_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_L, BFu17ll_BFu8i_L)
//============================================================================


struct  BFu17ll_BFu8i_S  {
  __tsu64 v1:17;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu17ll_BFu8i_S) C1{ FL:17 Fi:8 Fs}



static void Test_BFu17ll_BFu8i_S()
{
  {
    init_simple_test("BFu17ll_BFu8i_S");
    static STRUCT_IF_C BFu17ll_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_S, BFu17ll_BFu8i_S)
//============================================================================


struct  BFu17ll_BFu8i_Uc  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu8i_Uc) C1{ FL:17 Fi:8 Fc}



static void Test_BFu17ll_BFu8i_Uc()
{
  {
    init_simple_test("BFu17ll_BFu8i_Uc");
    static STRUCT_IF_C BFu17ll_BFu8i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Uc, BFu17ll_BFu8i_Uc)
//============================================================================


struct  BFu17ll_BFu8i_Ui  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu8i_Ui) C1{ FL:17 Fi:8 Fi}



static void Test_BFu17ll_BFu8i_Ui()
{
  {
    init_simple_test("BFu17ll_BFu8i_Ui");
    static STRUCT_IF_C BFu17ll_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Ui, BFu17ll_BFu8i_Ui)
//============================================================================


struct  BFu17ll_BFu8i_Ul  {
  __tsu64 v1:17;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu8i_Ul) C1{ FL:17 Fi:8 FL}



static void Test_BFu17ll_BFu8i_Ul()
{
  {
    init_simple_test("BFu17ll_BFu8i_Ul");
    static STRUCT_IF_C BFu17ll_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Ul, BFu17ll_BFu8i_Ul)
//============================================================================


struct  BFu17ll_BFu8i_Us  {
  __tsu64 v1:17;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu8i_Us) C1{ FL:17 Fi:8 Fs}



static void Test_BFu17ll_BFu8i_Us()
{
  {
    init_simple_test("BFu17ll_BFu8i_Us");
    static STRUCT_IF_C BFu17ll_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Us, BFu17ll_BFu8i_Us)
//============================================================================


struct  BFu17ll_BFu8i_Vp  {
  __tsu64 v1:17;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu17ll_BFu8i_Vp) C1{ FL:17 Fi:8 Fp}



static void Test_BFu17ll_BFu8i_Vp()
{
  {
    init_simple_test("BFu17ll_BFu8i_Vp");
    static STRUCT_IF_C BFu17ll_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8i_Vp, BFu17ll_BFu8i_Vp)
//============================================================================


struct  BFu17ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu17ll_BFu8ll) C1{ FL:17 FL:8}



static void Test_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll, BFu17ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu15i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu8ll_BFu15i) C1{ FL:17 FL:8 Fi:15}



static void Test_BFu17ll_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu15i, BFu17ll_BFu8ll_BFu15i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu15ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu8ll_BFu15ll) C1{ FL:17 FL:8 FL:15}



static void Test_BFu17ll_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu15ll, BFu17ll_BFu8ll_BFu15ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu15s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu8ll_BFu15s) C1{ FL:17 FL:8 Fs:15}



static void Test_BFu17ll_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu15s, BFu17ll_BFu8ll_BFu15s)
//============================================================================


struct  BFu17ll_BFu8ll_BFu16i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu8ll_BFu16i) C1{ FL:17 FL:8 Fi:16}



static void Test_BFu17ll_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu16i, BFu17ll_BFu8ll_BFu16i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu16ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu8ll_BFu16ll) C1{ FL:17 FL:8 FL:16}



static void Test_BFu17ll_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu16ll, BFu17ll_BFu8ll_BFu16ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu16s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu8ll_BFu16s) C1{ FL:17 FL:8 Fs:16}



static void Test_BFu17ll_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu16s, BFu17ll_BFu8ll_BFu16s)
//============================================================================


struct  BFu17ll_BFu8ll_BFu17i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu8ll_BFu17i) C1{ FL:17 FL:8 Fi:17}



static void Test_BFu17ll_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu17i, BFu17ll_BFu8ll_BFu17i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu17ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu8ll_BFu17ll) C1{ FL:17 FL:8 FL:17}



static void Test_BFu17ll_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu17ll, BFu17ll_BFu8ll_BFu17ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu1c  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu8ll_BFu1c) C1{ FL:17 FL:8 Fc:1}



static void Test_BFu17ll_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu1c, BFu17ll_BFu8ll_BFu1c)
//============================================================================


struct  BFu17ll_BFu8ll_BFu1i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu8ll_BFu1i) C1{ FL:17 FL:8 Fi:1}



static void Test_BFu17ll_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu1i, BFu17ll_BFu8ll_BFu1i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu1ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu8ll_BFu1ll) C1{ FL:17 FL:8 FL:1}



static void Test_BFu17ll_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu1ll, BFu17ll_BFu8ll_BFu1ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu1s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu8ll_BFu1s) C1{ FL:17 FL:8 Fs:1}



static void Test_BFu17ll_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu1s, BFu17ll_BFu8ll_BFu1s)
//============================================================================


struct  BFu17ll_BFu8ll_BFu31i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu8ll_BFu31i) C1{ FL:17 FL:8 Fi:31}



static void Test_BFu17ll_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu31i, BFu17ll_BFu8ll_BFu31i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu31ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu8ll_BFu31ll) C1{ FL:17 FL:8 FL:31}



static void Test_BFu17ll_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu31ll, BFu17ll_BFu8ll_BFu31ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu32i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu8ll_BFu32i) C1{ FL:17 FL:8 Fi:32}



static void Test_BFu17ll_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu32i, BFu17ll_BFu8ll_BFu32i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu32ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu8ll_BFu32ll) C1{ FL:17 FL:8 FL:32}



static void Test_BFu17ll_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu32ll, BFu17ll_BFu8ll_BFu32ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu33  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu8ll_BFu33) C1{ FL:17 FL:8 FL:33}



static void Test_BFu17ll_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu33");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu33, BFu17ll_BFu8ll_BFu33)
//============================================================================


struct  BFu17ll_BFu8ll_BFu7c  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu8ll_BFu7c) C1{ FL:17 FL:8 Fc:7}



static void Test_BFu17ll_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu7c, BFu17ll_BFu8ll_BFu7c)
//============================================================================


struct  BFu17ll_BFu8ll_BFu7i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu8ll_BFu7i) C1{ FL:17 FL:8 Fi:7}



static void Test_BFu17ll_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu7i, BFu17ll_BFu8ll_BFu7i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu7ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_BFu8ll_BFu7ll) C1{ FL:17 FL:8 FL:7}



static void Test_BFu17ll_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu7ll, BFu17ll_BFu8ll_BFu7ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu7s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_BFu8ll_BFu7s) C1{ FL:17 FL:8 Fs:7}



static void Test_BFu17ll_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu7s, BFu17ll_BFu8ll_BFu7s)
//============================================================================


struct  BFu17ll_BFu8ll_BFu8c  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_BFu8ll_BFu8c) C1{ FL:17 FL:8 Fc:8}



static void Test_BFu17ll_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu8c, BFu17ll_BFu8ll_BFu8c)
//============================================================================


struct  BFu17ll_BFu8ll_BFu8i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_BFu8ll_BFu8i) C1{ FL:17 FL:8 Fi:8}



static void Test_BFu17ll_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu8i, BFu17ll_BFu8ll_BFu8i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu8ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_BFu8ll_BFu8ll) C1{ FL:17 FL:8 FL:8}



static void Test_BFu17ll_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu17ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu8ll, BFu17ll_BFu8ll_BFu8ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu8s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_BFu8ll_BFu8s) C1{ FL:17 FL:8 Fs:8}



static void Test_BFu17ll_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu8s, BFu17ll_BFu8ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu8ll_BFu9i  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_BFu8ll_BFu9i) C1{ FL:17 FL:8 Fi:9}



static void Test_BFu17ll_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu9i, BFu17ll_BFu8ll_BFu9i)
//============================================================================


struct  BFu17ll_BFu8ll_BFu9ll  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_BFu8ll_BFu9ll) C1{ FL:17 FL:8 FL:9}



static void Test_BFu17ll_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu17ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu9ll, BFu17ll_BFu8ll_BFu9ll)
//============================================================================


struct  BFu17ll_BFu8ll_BFu9s  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_BFu8ll_BFu9s) C1{ FL:17 FL:8 Fs:9}



static void Test_BFu17ll_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu17ll_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu17ll_BFu8ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_BFu9s, BFu17ll_BFu8ll_BFu9s)
//============================================================================


struct  BFu17ll_BFu8ll_C  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu17ll_BFu8ll_C) C1{ FL:17 FL:8 Fc}



static void Test_BFu17ll_BFu8ll_C()
{
  {
    init_simple_test("BFu17ll_BFu8ll_C");
    static STRUCT_IF_C BFu17ll_BFu8ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_C");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_C, BFu17ll_BFu8ll_C)
//============================================================================


struct  BFu17ll_BFu8ll_D  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu17ll_BFu8ll_D) C1{ FL:17 FL:8 FL}



static void Test_BFu17ll_BFu8ll_D()
{
  {
    init_simple_test("BFu17ll_BFu8ll_D");
    static STRUCT_IF_C BFu17ll_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_D, BFu17ll_BFu8ll_D)
//============================================================================


struct  BFu17ll_BFu8ll_F  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu17ll_BFu8ll_F) C1{ FL:17 FL:8 Fi}



static void Test_BFu17ll_BFu8ll_F()
{
  {
    init_simple_test("BFu17ll_BFu8ll_F");
    static STRUCT_IF_C BFu17ll_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_F, BFu17ll_BFu8ll_F)
//============================================================================


struct  BFu17ll_BFu8ll_I  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu17ll_BFu8ll_I) C1{ FL:17 FL:8 Fi}



static void Test_BFu17ll_BFu8ll_I()
{
  {
    init_simple_test("BFu17ll_BFu8ll_I");
    static STRUCT_IF_C BFu17ll_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_I, BFu17ll_BFu8ll_I)
//============================================================================


struct  BFu17ll_BFu8ll_Ip  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu17ll_BFu8ll_Ip) C1{ FL:17 FL:8 Fp}



static void Test_BFu17ll_BFu8ll_Ip()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Ip");
    static STRUCT_IF_C BFu17ll_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Ip, BFu17ll_BFu8ll_Ip)
//============================================================================


struct  BFu17ll_BFu8ll_L  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu17ll_BFu8ll_L) C1{ FL:17 FL:8 FL}



static void Test_BFu17ll_BFu8ll_L()
{
  {
    init_simple_test("BFu17ll_BFu8ll_L");
    static STRUCT_IF_C BFu17ll_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_L, BFu17ll_BFu8ll_L)
//============================================================================


struct  BFu17ll_BFu8ll_S  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu17ll_BFu8ll_S) C1{ FL:17 FL:8 Fs}



static void Test_BFu17ll_BFu8ll_S()
{
  {
    init_simple_test("BFu17ll_BFu8ll_S");
    static STRUCT_IF_C BFu17ll_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_S, BFu17ll_BFu8ll_S)
//============================================================================


struct  BFu17ll_BFu8ll_Uc  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu17ll_BFu8ll_Uc) C1{ FL:17 FL:8 Fc}



static void Test_BFu17ll_BFu8ll_Uc()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Uc");
    static STRUCT_IF_C BFu17ll_BFu8ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Uc");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Uc, BFu17ll_BFu8ll_Uc)
//============================================================================


struct  BFu17ll_BFu8ll_Ui  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu17ll_BFu8ll_Ui) C1{ FL:17 FL:8 Fi}



static void Test_BFu17ll_BFu8ll_Ui()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Ui");
    static STRUCT_IF_C BFu17ll_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Ui, BFu17ll_BFu8ll_Ui)
//============================================================================


struct  BFu17ll_BFu8ll_Ul  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu17ll_BFu8ll_Ul) C1{ FL:17 FL:8 FL}



static void Test_BFu17ll_BFu8ll_Ul()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Ul");
    static STRUCT_IF_C BFu17ll_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Ul, BFu17ll_BFu8ll_Ul)
//============================================================================


struct  BFu17ll_BFu8ll_Us  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu17ll_BFu8ll_Us) C1{ FL:17 FL:8 Fs}



static void Test_BFu17ll_BFu8ll_Us()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Us");
    static STRUCT_IF_C BFu17ll_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Us, BFu17ll_BFu8ll_Us)
//============================================================================


struct  BFu17ll_BFu8ll_Vp  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu17ll_BFu8ll_Vp) C1{ FL:17 FL:8 Fp}



static void Test_BFu17ll_BFu8ll_Vp()
{
  {
    init_simple_test("BFu17ll_BFu8ll_Vp");
    static STRUCT_IF_C BFu17ll_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8ll_Vp, BFu17ll_BFu8ll_Vp)
//============================================================================


struct  BFu17ll_BFu8s  {
  __tsu64 v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu17ll_BFu8s) C1{ FL:17 Fs:8}



static void Test_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu17ll_BFu8s");
    static STRUCT_IF_C BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s, BFu17ll_BFu8s)
//============================================================================


struct  BFu17ll_BFu8s_BFu15i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_BFu8s_BFu15i) C1{ FL:17 Fs:8 Fi:15}



static void Test_BFu17ll_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu15i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu15i, BFu17ll_BFu8s_BFu15i)
//============================================================================


struct  BFu17ll_BFu8s_BFu15ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_BFu8s_BFu15ll) C1{ FL:17 Fs:8 FL:15}



static void Test_BFu17ll_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu17ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu15ll, BFu17ll_BFu8s_BFu15ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu15s  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_BFu8s_BFu15s) C1{ FL:17 Fs:8 Fs:15}



static void Test_BFu17ll_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu15s");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu15s, BFu17ll_BFu8s_BFu15s)
//============================================================================


struct  BFu17ll_BFu8s_BFu16i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_BFu8s_BFu16i) C1{ FL:17 Fs:8 Fi:16}



static void Test_BFu17ll_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu16i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu16i, BFu17ll_BFu8s_BFu16i)
//============================================================================


struct  BFu17ll_BFu8s_BFu16ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_BFu8s_BFu16ll) C1{ FL:17 Fs:8 FL:16}



static void Test_BFu17ll_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu17ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu16ll, BFu17ll_BFu8s_BFu16ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu16s  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_BFu8s_BFu16s) C1{ FL:17 Fs:8 Fs:16}



static void Test_BFu17ll_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu16s");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu16s, BFu17ll_BFu8s_BFu16s)
//============================================================================


struct  BFu17ll_BFu8s_BFu17i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_BFu8s_BFu17i) C1{ FL:17 Fs:8 Fi:17}



static void Test_BFu17ll_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu17i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu17i, BFu17ll_BFu8s_BFu17i)
//============================================================================


struct  BFu17ll_BFu8s_BFu17ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_BFu8s_BFu17ll) C1{ FL:17 Fs:8 FL:17}



static void Test_BFu17ll_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu17ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu17ll, BFu17ll_BFu8s_BFu17ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu1c  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_BFu8s_BFu1c) C1{ FL:17 Fs:8 Fc:1}



static void Test_BFu17ll_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu1c");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu1c, BFu17ll_BFu8s_BFu1c)
//============================================================================


struct  BFu17ll_BFu8s_BFu1i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_BFu8s_BFu1i) C1{ FL:17 Fs:8 Fi:1}



static void Test_BFu17ll_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu1i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu1i, BFu17ll_BFu8s_BFu1i)
//============================================================================


struct  BFu17ll_BFu8s_BFu1ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_BFu8s_BFu1ll) C1{ FL:17 Fs:8 FL:1}



static void Test_BFu17ll_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu1ll, BFu17ll_BFu8s_BFu1ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu1s  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_BFu8s_BFu1s) C1{ FL:17 Fs:8 Fs:1}



static void Test_BFu17ll_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu1s");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu17ll_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu1s, BFu17ll_BFu8s_BFu1s)
//============================================================================


struct  BFu17ll_BFu8s_BFu31i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_BFu8s_BFu31i) C1{ FL:17 Fs:8 Fi:31}



static void Test_BFu17ll_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu31i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu31i, BFu17ll_BFu8s_BFu31i)
//============================================================================


struct  BFu17ll_BFu8s_BFu31ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_BFu8s_BFu31ll) C1{ FL:17 Fs:8 FL:31}



static void Test_BFu17ll_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu17ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu31ll, BFu17ll_BFu8s_BFu31ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu32i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_BFu8s_BFu32i) C1{ FL:17 Fs:8 Fi:32}



static void Test_BFu17ll_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu32i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu32i, BFu17ll_BFu8s_BFu32i)
//============================================================================


struct  BFu17ll_BFu8s_BFu32ll  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_BFu8s_BFu32ll) C1{ FL:17 Fs:8 FL:32}



static void Test_BFu17ll_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu17ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu32ll, BFu17ll_BFu8s_BFu32ll)
//============================================================================


struct  BFu17ll_BFu8s_BFu33  {
  __tsu64 v1:17;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_BFu8s_BFu33) C1{ FL:17 Fs:8 FL:33}



static void Test_BFu17ll_BFu8s_BFu33()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu33");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu17ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu33, BFu17ll_BFu8s_BFu33)
//============================================================================


struct  BFu17ll_BFu8s_BFu7c  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_BFu8s_BFu7c) C1{ FL:17 Fs:8 Fc:7}



static void Test_BFu17ll_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu7c");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu7c, BFu17ll_BFu8s_BFu7c)
//============================================================================


struct  BFu17ll_BFu8s_BFu7i  {
  __tsu64 v1:17;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_BFu8s_BFu7i) C1{ FL:17 Fs:8 Fi:7}



static void Test_BFu17ll_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu17ll_BFu8s_BFu7i");
    static STRUCT_IF_C BFu17ll_BFu8s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu8s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu17ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu17ll_BFu8s_BFu7i, BFu17ll_BFu8s_BFu7i)
//============================================================================

