// 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"
#include "testsuite.h"

struct  empty  {
};
//SIG(-1 empty) C1{}



static void Test_empty()
{
  {
    init_simple_test("empty");
    STRUCT_IF_C empty lv;
    check2(sizeof(lv), 0, "sizeof(empty)");
    check2(__alignof__(lv), 1, "__alignof__(empty)");
  }
}
ARRANGE_TO_CALL_ME(Test_empty, empty)
//============================================================================


struct  Sf_BFu16i_BFu15s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu16i_BFu15s) C1{ FC2{} Fi:16 Fs:15}



static void Test_Sf_BFu16i_BFu15s()
{
  {
    init_simple_test("Sf_BFu16i_BFu15s");
    static STRUCT_IF_C Sf_BFu16i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu15s, Sf_BFu16i_BFu15s)
//============================================================================


struct  Sf_BFu16i_BFu16i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu16i_BFu16i) C1{ FC2{} Fi:16 Fi:16}



static void Test_Sf_BFu16i_BFu16i()
{
  {
    init_simple_test("Sf_BFu16i_BFu16i");
    static STRUCT_IF_C Sf_BFu16i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu16i, Sf_BFu16i_BFu16i)
//============================================================================


struct  Sf_BFu16i_BFu16ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu16i_BFu16ll) C1{ FC2{} Fi:16 FL:16}



static void Test_Sf_BFu16i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu16ll");
    static STRUCT_IF_C Sf_BFu16i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu16ll, Sf_BFu16i_BFu16ll)
//============================================================================


struct  Sf_BFu16i_BFu16s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu16i_BFu16s) C1{ FC2{} Fi:16 Fs:16}



static void Test_Sf_BFu16i_BFu16s()
{
  {
    init_simple_test("Sf_BFu16i_BFu16s");
    static STRUCT_IF_C Sf_BFu16i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu16s, Sf_BFu16i_BFu16s)
//============================================================================


struct  Sf_BFu16i_BFu17i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu16i_BFu17i) C1{ FC2{} Fi:16 Fi:17}



static void Test_Sf_BFu16i_BFu17i()
{
  {
    init_simple_test("Sf_BFu16i_BFu17i");
    static STRUCT_IF_C Sf_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu17i, Sf_BFu16i_BFu17i)
//============================================================================


struct  Sf_BFu16i_BFu17ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu16i_BFu17ll) C1{ FC2{} Fi:16 FL:17}



static void Test_Sf_BFu16i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu17ll");
    static STRUCT_IF_C Sf_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu17ll, Sf_BFu16i_BFu17ll)
//============================================================================


struct  Sf_BFu16i_BFu1c  {
  struct empty v1;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu16i_BFu1c) C1{ FC2{} Fi:16 Fc:1}



static void Test_Sf_BFu16i_BFu1c()
{
  {
    init_simple_test("Sf_BFu16i_BFu1c");
    static STRUCT_IF_C Sf_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu1c, Sf_BFu16i_BFu1c)
//============================================================================


struct  Sf_BFu16i_BFu1i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu16i_BFu1i) C1{ FC2{} Fi:16 Fi:1}



static void Test_Sf_BFu16i_BFu1i()
{
  {
    init_simple_test("Sf_BFu16i_BFu1i");
    static STRUCT_IF_C Sf_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu1i, Sf_BFu16i_BFu1i)
//============================================================================


struct  Sf_BFu16i_BFu1ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu16i_BFu1ll) C1{ FC2{} Fi:16 FL:1}



static void Test_Sf_BFu16i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu1ll");
    static STRUCT_IF_C Sf_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu1ll, Sf_BFu16i_BFu1ll)
//============================================================================


struct  Sf_BFu16i_BFu1s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu16i_BFu1s) C1{ FC2{} Fi:16 Fs:1}



static void Test_Sf_BFu16i_BFu1s()
{
  {
    init_simple_test("Sf_BFu16i_BFu1s");
    static STRUCT_IF_C Sf_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu1s, Sf_BFu16i_BFu1s)
//============================================================================


struct  Sf_BFu16i_BFu31i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu16i_BFu31i) C1{ FC2{} Fi:16 Fi:31}



static void Test_Sf_BFu16i_BFu31i()
{
  {
    init_simple_test("Sf_BFu16i_BFu31i");
    static STRUCT_IF_C Sf_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu31i, Sf_BFu16i_BFu31i)
//============================================================================


struct  Sf_BFu16i_BFu31ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu16i_BFu31ll) C1{ FC2{} Fi:16 FL:31}



static void Test_Sf_BFu16i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu31ll");
    static STRUCT_IF_C Sf_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu31ll, Sf_BFu16i_BFu31ll)
//============================================================================


struct  Sf_BFu16i_BFu32i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu16i_BFu32i) C1{ FC2{} Fi:16 Fi:32}



static void Test_Sf_BFu16i_BFu32i()
{
  {
    init_simple_test("Sf_BFu16i_BFu32i");
    static STRUCT_IF_C Sf_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu32i, Sf_BFu16i_BFu32i)
//============================================================================


struct  Sf_BFu16i_BFu32ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu16i_BFu32ll) C1{ FC2{} Fi:16 FL:32}



static void Test_Sf_BFu16i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu32ll");
    static STRUCT_IF_C Sf_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu32ll, Sf_BFu16i_BFu32ll)
//============================================================================


struct  Sf_BFu16i_BFu33  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu16i_BFu33) C1{ FC2{} Fi:16 FL:33}



static void Test_Sf_BFu16i_BFu33()
{
  {
    init_simple_test("Sf_BFu16i_BFu33");
    static STRUCT_IF_C Sf_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu33, Sf_BFu16i_BFu33)
//============================================================================


struct  Sf_BFu16i_BFu7c  {
  struct empty v1;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu16i_BFu7c) C1{ FC2{} Fi:16 Fc:7}



static void Test_Sf_BFu16i_BFu7c()
{
  {
    init_simple_test("Sf_BFu16i_BFu7c");
    static STRUCT_IF_C Sf_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu7c, Sf_BFu16i_BFu7c)
//============================================================================


struct  Sf_BFu16i_BFu7i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu16i_BFu7i) C1{ FC2{} Fi:16 Fi:7}



static void Test_Sf_BFu16i_BFu7i()
{
  {
    init_simple_test("Sf_BFu16i_BFu7i");
    static STRUCT_IF_C Sf_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu7i, Sf_BFu16i_BFu7i)
//============================================================================


struct  Sf_BFu16i_BFu7ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu16i_BFu7ll) C1{ FC2{} Fi:16 FL:7}



static void Test_Sf_BFu16i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu7ll");
    static STRUCT_IF_C Sf_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu7ll, Sf_BFu16i_BFu7ll)
//============================================================================


struct  Sf_BFu16i_BFu7s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu16i_BFu7s) C1{ FC2{} Fi:16 Fs:7}



static void Test_Sf_BFu16i_BFu7s()
{
  {
    init_simple_test("Sf_BFu16i_BFu7s");
    static STRUCT_IF_C Sf_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu7s, Sf_BFu16i_BFu7s)
//============================================================================


struct  Sf_BFu16i_BFu8c  {
  struct empty v1;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu16i_BFu8c) C1{ FC2{} Fi:16 Fc:8}



static void Test_Sf_BFu16i_BFu8c()
{
  {
    init_simple_test("Sf_BFu16i_BFu8c");
    static STRUCT_IF_C Sf_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu8c, Sf_BFu16i_BFu8c)
//============================================================================


struct  Sf_BFu16i_BFu8i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu16i_BFu8i) C1{ FC2{} Fi:16 Fi:8}



static void Test_Sf_BFu16i_BFu8i()
{
  {
    init_simple_test("Sf_BFu16i_BFu8i");
    static STRUCT_IF_C Sf_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu8i, Sf_BFu16i_BFu8i)
//============================================================================


struct  Sf_BFu16i_BFu8ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu16i_BFu8ll) C1{ FC2{} Fi:16 FL:8}



static void Test_Sf_BFu16i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu8ll");
    static STRUCT_IF_C Sf_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu8ll, Sf_BFu16i_BFu8ll)
//============================================================================


struct  Sf_BFu16i_BFu8s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu16i_BFu8s) C1{ FC2{} Fi:16 Fs:8}



static void Test_Sf_BFu16i_BFu8s()
{
  {
    init_simple_test("Sf_BFu16i_BFu8s");
    static STRUCT_IF_C Sf_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu8s, Sf_BFu16i_BFu8s)
//============================================================================


struct  Sf_BFu16i_BFu9i  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu16i_BFu9i) C1{ FC2{} Fi:16 Fi:9}



static void Test_Sf_BFu16i_BFu9i()
{
  {
    init_simple_test("Sf_BFu16i_BFu9i");
    static STRUCT_IF_C Sf_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu9i, Sf_BFu16i_BFu9i)
//============================================================================


struct  Sf_BFu16i_BFu9ll  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu16i_BFu9ll) C1{ FC2{} Fi:16 FL:9}



static void Test_Sf_BFu16i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu16i_BFu9ll");
    static STRUCT_IF_C Sf_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu9ll, Sf_BFu16i_BFu9ll)
//============================================================================


struct  Sf_BFu16i_BFu9s  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu16i_BFu9s) C1{ FC2{} Fi:16 Fs:9}



static void Test_Sf_BFu16i_BFu9s()
{
  {
    init_simple_test("Sf_BFu16i_BFu9s");
    static STRUCT_IF_C Sf_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_BFu9s, Sf_BFu16i_BFu9s)
//============================================================================


struct  Sf_BFu16i_C  {
  struct empty v1;
  unsigned int v2:16;
  char v3;
};
//SIG(1 Sf_BFu16i_C) C1{ FC2{} Fi:16 Fc}



static void Test_Sf_BFu16i_C()
{
  {
    init_simple_test("Sf_BFu16i_C");
    static STRUCT_IF_C Sf_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_C");
    check_field_offset(lv, v3, 2, "Sf_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_C, Sf_BFu16i_C)
//============================================================================


struct  Sf_BFu16i_D  {
  struct empty v1;
  unsigned int v2:16;
  double v3;
};
//SIG(1 Sf_BFu16i_D) C1{ FC2{} Fi:16 FL}



static void Test_Sf_BFu16i_D()
{
  {
    init_simple_test("Sf_BFu16i_D");
    static STRUCT_IF_C Sf_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_D, Sf_BFu16i_D)
//============================================================================


struct  Sf_BFu16i_F  {
  struct empty v1;
  unsigned int v2:16;
  float v3;
};
//SIG(1 Sf_BFu16i_F) C1{ FC2{} Fi:16 Fi}



static void Test_Sf_BFu16i_F()
{
  {
    init_simple_test("Sf_BFu16i_F");
    static STRUCT_IF_C Sf_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_F, Sf_BFu16i_F)
//============================================================================


struct  Sf_BFu16i_I  {
  struct empty v1;
  unsigned int v2:16;
  int v3;
};
//SIG(1 Sf_BFu16i_I) C1{ FC2{} Fi:16 Fi}



static void Test_Sf_BFu16i_I()
{
  {
    init_simple_test("Sf_BFu16i_I");
    static STRUCT_IF_C Sf_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_I, Sf_BFu16i_I)
//============================================================================


struct  Sf_BFu16i_Ip  {
  struct empty v1;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 Sf_BFu16i_Ip) C1{ FC2{} Fi:16 Fp}



static void Test_Sf_BFu16i_Ip()
{
  {
    init_simple_test("Sf_BFu16i_Ip");
    static STRUCT_IF_C Sf_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Ip, Sf_BFu16i_Ip)
//============================================================================


struct  Sf_BFu16i_L  {
  struct empty v1;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 Sf_BFu16i_L) C1{ FC2{} Fi:16 FL}



static void Test_Sf_BFu16i_L()
{
  {
    init_simple_test("Sf_BFu16i_L");
    static STRUCT_IF_C Sf_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_L, Sf_BFu16i_L)
//============================================================================


struct  Sf_BFu16i_S  {
  struct empty v1;
  unsigned int v2:16;
  short v3;
};
//SIG(1 Sf_BFu16i_S) C1{ FC2{} Fi:16 Fs}



static void Test_Sf_BFu16i_S()
{
  {
    init_simple_test("Sf_BFu16i_S");
    static STRUCT_IF_C Sf_BFu16i_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_S, Sf_BFu16i_S)
//============================================================================


struct  Sf_BFu16i_Sf  {
  struct empty v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Sf_BFu16i_Sf) C1{ FC2{} Fi:16 FC2}



static void Test_Sf_BFu16i_Sf()
{
  {
    init_simple_test("Sf_BFu16i_Sf");
    static STRUCT_IF_C Sf_BFu16i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Sf, Sf_BFu16i_Sf)
//============================================================================


struct  Sf_BFu16i_Uc  {
  struct empty v1;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 Sf_BFu16i_Uc) C1{ FC2{} Fi:16 Fc}



static void Test_Sf_BFu16i_Uc()
{
  {
    init_simple_test("Sf_BFu16i_Uc");
    static STRUCT_IF_C Sf_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Uc, Sf_BFu16i_Uc)
//============================================================================


struct  Sf_BFu16i_Ui  {
  struct empty v1;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 Sf_BFu16i_Ui) C1{ FC2{} Fi:16 Fi}



static void Test_Sf_BFu16i_Ui()
{
  {
    init_simple_test("Sf_BFu16i_Ui");
    static STRUCT_IF_C Sf_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Ui, Sf_BFu16i_Ui)
//============================================================================


struct  Sf_BFu16i_Ul  {
  struct empty v1;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 Sf_BFu16i_Ul) C1{ FC2{} Fi:16 FL}



static void Test_Sf_BFu16i_Ul()
{
  {
    init_simple_test("Sf_BFu16i_Ul");
    static STRUCT_IF_C Sf_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Ul, Sf_BFu16i_Ul)
//============================================================================


struct  Sf_BFu16i_Us  {
  struct empty v1;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 Sf_BFu16i_Us) C1{ FC2{} Fi:16 Fs}



static void Test_Sf_BFu16i_Us()
{
  {
    init_simple_test("Sf_BFu16i_Us");
    static STRUCT_IF_C Sf_BFu16i_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Us, Sf_BFu16i_Us)
//============================================================================


struct  Sf_BFu16i_Vp  {
  struct empty v1;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 Sf_BFu16i_Vp) C1{ FC2{} Fi:16 Fp}



static void Test_Sf_BFu16i_Vp()
{
  {
    init_simple_test("Sf_BFu16i_Vp");
    static STRUCT_IF_C Sf_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu16i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16i_Vp, Sf_BFu16i_Vp)
//============================================================================


struct  Sf_BFu16ll  {
  struct empty v1;
  __tsu64 v2:16;
};
//SIG(1 Sf_BFu16ll) C1{ FC2{} FL:16}



static void Test_Sf_BFu16ll()
{
  {
    init_simple_test("Sf_BFu16ll");
    static STRUCT_IF_C Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll, Sf_BFu16ll)
//============================================================================


struct  Sf_BFu16ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu16ll_BFu15i) C1{ FC2{} FL:16 Fi:15}



static void Test_Sf_BFu16ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu15i");
    static STRUCT_IF_C Sf_BFu16ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu15i, Sf_BFu16ll_BFu15i)
//============================================================================


struct  Sf_BFu16ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu16ll_BFu15ll) C1{ FC2{} FL:16 FL:15}



static void Test_Sf_BFu16ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu15ll, Sf_BFu16ll_BFu15ll)
//============================================================================


struct  Sf_BFu16ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu16ll_BFu15s) C1{ FC2{} FL:16 Fs:15}



static void Test_Sf_BFu16ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu15s");
    static STRUCT_IF_C Sf_BFu16ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu15s, Sf_BFu16ll_BFu15s)
//============================================================================


struct  Sf_BFu16ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu16ll_BFu16i) C1{ FC2{} FL:16 Fi:16}



static void Test_Sf_BFu16ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu16i");
    static STRUCT_IF_C Sf_BFu16ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu16i, Sf_BFu16ll_BFu16i)
//============================================================================


struct  Sf_BFu16ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu16ll_BFu16ll) C1{ FC2{} FL:16 FL:16}



static void Test_Sf_BFu16ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu16ll, Sf_BFu16ll_BFu16ll)
//============================================================================


struct  Sf_BFu16ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu16ll_BFu16s) C1{ FC2{} FL:16 Fs:16}



static void Test_Sf_BFu16ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu16s");
    static STRUCT_IF_C Sf_BFu16ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu16s, Sf_BFu16ll_BFu16s)
//============================================================================


struct  Sf_BFu16ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu16ll_BFu17i) C1{ FC2{} FL:16 Fi:17}



static void Test_Sf_BFu16ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu17i");
    static STRUCT_IF_C Sf_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu17i, Sf_BFu16ll_BFu17i)
//============================================================================


struct  Sf_BFu16ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu16ll_BFu17ll) C1{ FC2{} FL:16 FL:17}



static void Test_Sf_BFu16ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu17ll, Sf_BFu16ll_BFu17ll)
//============================================================================


struct  Sf_BFu16ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu16ll_BFu1c) C1{ FC2{} FL:16 Fc:1}



static void Test_Sf_BFu16ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu16ll_BFu1c");
    static STRUCT_IF_C Sf_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu1c, Sf_BFu16ll_BFu1c)
//============================================================================


struct  Sf_BFu16ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu16ll_BFu1i) C1{ FC2{} FL:16 Fi:1}



static void Test_Sf_BFu16ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu1i");
    static STRUCT_IF_C Sf_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu1i, Sf_BFu16ll_BFu1i)
//============================================================================


struct  Sf_BFu16ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu16ll_BFu1ll) C1{ FC2{} FL:16 FL:1}



static void Test_Sf_BFu16ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu1ll, Sf_BFu16ll_BFu1ll)
//============================================================================


struct  Sf_BFu16ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu16ll_BFu1s) C1{ FC2{} FL:16 Fs:1}



static void Test_Sf_BFu16ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu1s");
    static STRUCT_IF_C Sf_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu1s, Sf_BFu16ll_BFu1s)
//============================================================================


struct  Sf_BFu16ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu16ll_BFu31i) C1{ FC2{} FL:16 Fi:31}



static void Test_Sf_BFu16ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu31i");
    static STRUCT_IF_C Sf_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu31i, Sf_BFu16ll_BFu31i)
//============================================================================


struct  Sf_BFu16ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu16ll_BFu31ll) C1{ FC2{} FL:16 FL:31}



static void Test_Sf_BFu16ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu31ll, Sf_BFu16ll_BFu31ll)
//============================================================================


struct  Sf_BFu16ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu16ll_BFu32i) C1{ FC2{} FL:16 Fi:32}



static void Test_Sf_BFu16ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu32i");
    static STRUCT_IF_C Sf_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu32i, Sf_BFu16ll_BFu32i)
//============================================================================


struct  Sf_BFu16ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu16ll_BFu32ll) C1{ FC2{} FL:16 FL:32}



static void Test_Sf_BFu16ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu32ll, Sf_BFu16ll_BFu32ll)
//============================================================================


struct  Sf_BFu16ll_BFu33  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu16ll_BFu33) C1{ FC2{} FL:16 FL:33}



static void Test_Sf_BFu16ll_BFu33()
{
  {
    init_simple_test("Sf_BFu16ll_BFu33");
    static STRUCT_IF_C Sf_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu33, Sf_BFu16ll_BFu33)
//============================================================================


struct  Sf_BFu16ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu16ll_BFu7c) C1{ FC2{} FL:16 Fc:7}



static void Test_Sf_BFu16ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu16ll_BFu7c");
    static STRUCT_IF_C Sf_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu7c, Sf_BFu16ll_BFu7c)
//============================================================================


struct  Sf_BFu16ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu16ll_BFu7i) C1{ FC2{} FL:16 Fi:7}



static void Test_Sf_BFu16ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu7i");
    static STRUCT_IF_C Sf_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu7i, Sf_BFu16ll_BFu7i)
//============================================================================


struct  Sf_BFu16ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu16ll_BFu7ll) C1{ FC2{} FL:16 FL:7}



static void Test_Sf_BFu16ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu7ll, Sf_BFu16ll_BFu7ll)
//============================================================================


struct  Sf_BFu16ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu16ll_BFu7s) C1{ FC2{} FL:16 Fs:7}



static void Test_Sf_BFu16ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu7s");
    static STRUCT_IF_C Sf_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu7s, Sf_BFu16ll_BFu7s)
//============================================================================


struct  Sf_BFu16ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu16ll_BFu8c) C1{ FC2{} FL:16 Fc:8}



static void Test_Sf_BFu16ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu16ll_BFu8c");
    static STRUCT_IF_C Sf_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu8c, Sf_BFu16ll_BFu8c)
//============================================================================


struct  Sf_BFu16ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu16ll_BFu8i) C1{ FC2{} FL:16 Fi:8}



static void Test_Sf_BFu16ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu8i");
    static STRUCT_IF_C Sf_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu8i, Sf_BFu16ll_BFu8i)
//============================================================================


struct  Sf_BFu16ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu16ll_BFu8ll) C1{ FC2{} FL:16 FL:8}



static void Test_Sf_BFu16ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu8ll, Sf_BFu16ll_BFu8ll)
//============================================================================


struct  Sf_BFu16ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu16ll_BFu8s) C1{ FC2{} FL:16 Fs:8}



static void Test_Sf_BFu16ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu8s");
    static STRUCT_IF_C Sf_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu8s, Sf_BFu16ll_BFu8s)
//============================================================================


struct  Sf_BFu16ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu16ll_BFu9i) C1{ FC2{} FL:16 Fi:9}



static void Test_Sf_BFu16ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu16ll_BFu9i");
    static STRUCT_IF_C Sf_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu9i, Sf_BFu16ll_BFu9i)
//============================================================================


struct  Sf_BFu16ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu16ll_BFu9ll) C1{ FC2{} FL:16 FL:9}



static void Test_Sf_BFu16ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu16ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu9ll, Sf_BFu16ll_BFu9ll)
//============================================================================


struct  Sf_BFu16ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu16ll_BFu9s) C1{ FC2{} FL:16 Fs:9}



static void Test_Sf_BFu16ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu16ll_BFu9s");
    static STRUCT_IF_C Sf_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_BFu9s, Sf_BFu16ll_BFu9s)
//============================================================================


struct  Sf_BFu16ll_C  {
  struct empty v1;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 Sf_BFu16ll_C) C1{ FC2{} FL:16 Fc}



static void Test_Sf_BFu16ll_C()
{
  {
    init_simple_test("Sf_BFu16ll_C");
    static STRUCT_IF_C Sf_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_C");
    check_field_offset(lv, v3, 2, "Sf_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_C, Sf_BFu16ll_C)
//============================================================================


struct  Sf_BFu16ll_D  {
  struct empty v1;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 Sf_BFu16ll_D) C1{ FC2{} FL:16 FL}



static void Test_Sf_BFu16ll_D()
{
  {
    init_simple_test("Sf_BFu16ll_D");
    static STRUCT_IF_C Sf_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_D, Sf_BFu16ll_D)
//============================================================================


struct  Sf_BFu16ll_F  {
  struct empty v1;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 Sf_BFu16ll_F) C1{ FC2{} FL:16 Fi}



static void Test_Sf_BFu16ll_F()
{
  {
    init_simple_test("Sf_BFu16ll_F");
    static STRUCT_IF_C Sf_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_F, Sf_BFu16ll_F)
//============================================================================


struct  Sf_BFu16ll_I  {
  struct empty v1;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 Sf_BFu16ll_I) C1{ FC2{} FL:16 Fi}



static void Test_Sf_BFu16ll_I()
{
  {
    init_simple_test("Sf_BFu16ll_I");
    static STRUCT_IF_C Sf_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_I, Sf_BFu16ll_I)
//============================================================================


struct  Sf_BFu16ll_Ip  {
  struct empty v1;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 Sf_BFu16ll_Ip) C1{ FC2{} FL:16 Fp}



static void Test_Sf_BFu16ll_Ip()
{
  {
    init_simple_test("Sf_BFu16ll_Ip");
    static STRUCT_IF_C Sf_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Ip, Sf_BFu16ll_Ip)
//============================================================================


struct  Sf_BFu16ll_L  {
  struct empty v1;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 Sf_BFu16ll_L) C1{ FC2{} FL:16 FL}



static void Test_Sf_BFu16ll_L()
{
  {
    init_simple_test("Sf_BFu16ll_L");
    static STRUCT_IF_C Sf_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_L, Sf_BFu16ll_L)
//============================================================================


struct  Sf_BFu16ll_S  {
  struct empty v1;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 Sf_BFu16ll_S) C1{ FC2{} FL:16 Fs}



static void Test_Sf_BFu16ll_S()
{
  {
    init_simple_test("Sf_BFu16ll_S");
    static STRUCT_IF_C Sf_BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_S, Sf_BFu16ll_S)
//============================================================================


struct  Sf_BFu16ll_Sf  {
  struct empty v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Sf_BFu16ll_Sf) C1{ FC2{} FL:16 FC2}



static void Test_Sf_BFu16ll_Sf()
{
  {
    init_simple_test("Sf_BFu16ll_Sf");
    static STRUCT_IF_C Sf_BFu16ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Sf, Sf_BFu16ll_Sf)
//============================================================================


struct  Sf_BFu16ll_Uc  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 Sf_BFu16ll_Uc) C1{ FC2{} FL:16 Fc}



static void Test_Sf_BFu16ll_Uc()
{
  {
    init_simple_test("Sf_BFu16ll_Uc");
    static STRUCT_IF_C Sf_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Uc, Sf_BFu16ll_Uc)
//============================================================================


struct  Sf_BFu16ll_Ui  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 Sf_BFu16ll_Ui) C1{ FC2{} FL:16 Fi}



static void Test_Sf_BFu16ll_Ui()
{
  {
    init_simple_test("Sf_BFu16ll_Ui");
    static STRUCT_IF_C Sf_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Ui, Sf_BFu16ll_Ui)
//============================================================================


struct  Sf_BFu16ll_Ul  {
  struct empty v1;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 Sf_BFu16ll_Ul) C1{ FC2{} FL:16 FL}



static void Test_Sf_BFu16ll_Ul()
{
  {
    init_simple_test("Sf_BFu16ll_Ul");
    static STRUCT_IF_C Sf_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Ul, Sf_BFu16ll_Ul)
//============================================================================


struct  Sf_BFu16ll_Us  {
  struct empty v1;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 Sf_BFu16ll_Us) C1{ FC2{} FL:16 Fs}



static void Test_Sf_BFu16ll_Us()
{
  {
    init_simple_test("Sf_BFu16ll_Us");
    static STRUCT_IF_C Sf_BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Us, Sf_BFu16ll_Us)
//============================================================================


struct  Sf_BFu16ll_Vp  {
  struct empty v1;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 Sf_BFu16ll_Vp) C1{ FC2{} FL:16 Fp}



static void Test_Sf_BFu16ll_Vp()
{
  {
    init_simple_test("Sf_BFu16ll_Vp");
    static STRUCT_IF_C Sf_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu16ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16ll_Vp, Sf_BFu16ll_Vp)
//============================================================================


struct  Sf_BFu16s  {
  struct empty v1;
  unsigned short v2:16;
};
//SIG(1 Sf_BFu16s) C1{ FC2{} Fs:16}



static void Test_Sf_BFu16s()
{
  {
    init_simple_test("Sf_BFu16s");
    static STRUCT_IF_C Sf_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s, Sf_BFu16s)
//============================================================================


struct  Sf_BFu16s_BFu15i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu16s_BFu15i) C1{ FC2{} Fs:16 Fi:15}



static void Test_Sf_BFu16s_BFu15i()
{
  {
    init_simple_test("Sf_BFu16s_BFu15i");
    static STRUCT_IF_C Sf_BFu16s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu15i, Sf_BFu16s_BFu15i)
//============================================================================


struct  Sf_BFu16s_BFu15ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu16s_BFu15ll) C1{ FC2{} Fs:16 FL:15}



static void Test_Sf_BFu16s_BFu15ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu15ll");
    static STRUCT_IF_C Sf_BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu15ll, Sf_BFu16s_BFu15ll)
//============================================================================


struct  Sf_BFu16s_BFu15s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu16s_BFu15s) C1{ FC2{} Fs:16 Fs:15}



static void Test_Sf_BFu16s_BFu15s()
{
  {
    init_simple_test("Sf_BFu16s_BFu15s");
    static STRUCT_IF_C Sf_BFu16s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu15s, Sf_BFu16s_BFu15s)
//============================================================================


struct  Sf_BFu16s_BFu16i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu16s_BFu16i) C1{ FC2{} Fs:16 Fi:16}



static void Test_Sf_BFu16s_BFu16i()
{
  {
    init_simple_test("Sf_BFu16s_BFu16i");
    static STRUCT_IF_C Sf_BFu16s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu16i, Sf_BFu16s_BFu16i)
//============================================================================


struct  Sf_BFu16s_BFu16ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu16s_BFu16ll) C1{ FC2{} Fs:16 FL:16}



static void Test_Sf_BFu16s_BFu16ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu16ll");
    static STRUCT_IF_C Sf_BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu16ll, Sf_BFu16s_BFu16ll)
//============================================================================


struct  Sf_BFu16s_BFu16s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu16s_BFu16s) C1{ FC2{} Fs:16 Fs:16}



static void Test_Sf_BFu16s_BFu16s()
{
  {
    init_simple_test("Sf_BFu16s_BFu16s");
    static STRUCT_IF_C Sf_BFu16s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu16s, Sf_BFu16s_BFu16s)
//============================================================================


struct  Sf_BFu16s_BFu17i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu16s_BFu17i) C1{ FC2{} Fs:16 Fi:17}



static void Test_Sf_BFu16s_BFu17i()
{
  {
    init_simple_test("Sf_BFu16s_BFu17i");
    static STRUCT_IF_C Sf_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu17i, Sf_BFu16s_BFu17i)
//============================================================================


struct  Sf_BFu16s_BFu17ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu16s_BFu17ll) C1{ FC2{} Fs:16 FL:17}



static void Test_Sf_BFu16s_BFu17ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu17ll");
    static STRUCT_IF_C Sf_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu17ll, Sf_BFu16s_BFu17ll)
//============================================================================


struct  Sf_BFu16s_BFu1c  {
  struct empty v1;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu16s_BFu1c) C1{ FC2{} Fs:16 Fc:1}



static void Test_Sf_BFu16s_BFu1c()
{
  {
    init_simple_test("Sf_BFu16s_BFu1c");
    static STRUCT_IF_C Sf_BFu16s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu1c, Sf_BFu16s_BFu1c)
//============================================================================


struct  Sf_BFu16s_BFu1i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu16s_BFu1i) C1{ FC2{} Fs:16 Fi:1}



static void Test_Sf_BFu16s_BFu1i()
{
  {
    init_simple_test("Sf_BFu16s_BFu1i");
    static STRUCT_IF_C Sf_BFu16s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu1i, Sf_BFu16s_BFu1i)
//============================================================================


struct  Sf_BFu16s_BFu1ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu16s_BFu1ll) C1{ FC2{} Fs:16 FL:1}



static void Test_Sf_BFu16s_BFu1ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu1ll");
    static STRUCT_IF_C Sf_BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu1ll, Sf_BFu16s_BFu1ll)
//============================================================================


struct  Sf_BFu16s_BFu1s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu16s_BFu1s) C1{ FC2{} Fs:16 Fs:1}



static void Test_Sf_BFu16s_BFu1s()
{
  {
    init_simple_test("Sf_BFu16s_BFu1s");
    static STRUCT_IF_C Sf_BFu16s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu1s, Sf_BFu16s_BFu1s)
//============================================================================


struct  Sf_BFu16s_BFu31i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu16s_BFu31i) C1{ FC2{} Fs:16 Fi:31}



static void Test_Sf_BFu16s_BFu31i()
{
  {
    init_simple_test("Sf_BFu16s_BFu31i");
    static STRUCT_IF_C Sf_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu31i, Sf_BFu16s_BFu31i)
//============================================================================


struct  Sf_BFu16s_BFu31ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu16s_BFu31ll) C1{ FC2{} Fs:16 FL:31}



static void Test_Sf_BFu16s_BFu31ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu31ll");
    static STRUCT_IF_C Sf_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu31ll, Sf_BFu16s_BFu31ll)
//============================================================================


struct  Sf_BFu16s_BFu32i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu16s_BFu32i) C1{ FC2{} Fs:16 Fi:32}



static void Test_Sf_BFu16s_BFu32i()
{
  {
    init_simple_test("Sf_BFu16s_BFu32i");
    static STRUCT_IF_C Sf_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu32i, Sf_BFu16s_BFu32i)
//============================================================================


struct  Sf_BFu16s_BFu32ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu16s_BFu32ll) C1{ FC2{} Fs:16 FL:32}



static void Test_Sf_BFu16s_BFu32ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu32ll");
    static STRUCT_IF_C Sf_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu32ll, Sf_BFu16s_BFu32ll)
//============================================================================


struct  Sf_BFu16s_BFu33  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu16s_BFu33) C1{ FC2{} Fs:16 FL:33}



static void Test_Sf_BFu16s_BFu33()
{
  {
    init_simple_test("Sf_BFu16s_BFu33");
    static STRUCT_IF_C Sf_BFu16s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_BFu16s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu33, Sf_BFu16s_BFu33)
//============================================================================


struct  Sf_BFu16s_BFu7c  {
  struct empty v1;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu16s_BFu7c) C1{ FC2{} Fs:16 Fc:7}



static void Test_Sf_BFu16s_BFu7c()
{
  {
    init_simple_test("Sf_BFu16s_BFu7c");
    static STRUCT_IF_C Sf_BFu16s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu7c, Sf_BFu16s_BFu7c)
//============================================================================


struct  Sf_BFu16s_BFu7i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu16s_BFu7i) C1{ FC2{} Fs:16 Fi:7}



static void Test_Sf_BFu16s_BFu7i()
{
  {
    init_simple_test("Sf_BFu16s_BFu7i");
    static STRUCT_IF_C Sf_BFu16s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu7i, Sf_BFu16s_BFu7i)
//============================================================================


struct  Sf_BFu16s_BFu7ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu16s_BFu7ll) C1{ FC2{} Fs:16 FL:7}



static void Test_Sf_BFu16s_BFu7ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu7ll");
    static STRUCT_IF_C Sf_BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu7ll, Sf_BFu16s_BFu7ll)
//============================================================================


struct  Sf_BFu16s_BFu7s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu16s_BFu7s) C1{ FC2{} Fs:16 Fs:7}



static void Test_Sf_BFu16s_BFu7s()
{
  {
    init_simple_test("Sf_BFu16s_BFu7s");
    static STRUCT_IF_C Sf_BFu16s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu7s, Sf_BFu16s_BFu7s)
//============================================================================


struct  Sf_BFu16s_BFu8c  {
  struct empty v1;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu16s_BFu8c) C1{ FC2{} Fs:16 Fc:8}



static void Test_Sf_BFu16s_BFu8c()
{
  {
    init_simple_test("Sf_BFu16s_BFu8c");
    static STRUCT_IF_C Sf_BFu16s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu8c, Sf_BFu16s_BFu8c)
//============================================================================


struct  Sf_BFu16s_BFu8i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu16s_BFu8i) C1{ FC2{} Fs:16 Fi:8}



static void Test_Sf_BFu16s_BFu8i()
{
  {
    init_simple_test("Sf_BFu16s_BFu8i");
    static STRUCT_IF_C Sf_BFu16s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu8i, Sf_BFu16s_BFu8i)
//============================================================================


struct  Sf_BFu16s_BFu8ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu16s_BFu8ll) C1{ FC2{} Fs:16 FL:8}



static void Test_Sf_BFu16s_BFu8ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu8ll");
    static STRUCT_IF_C Sf_BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu8ll, Sf_BFu16s_BFu8ll)
//============================================================================


struct  Sf_BFu16s_BFu8s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu16s_BFu8s) C1{ FC2{} Fs:16 Fs:8}



static void Test_Sf_BFu16s_BFu8s()
{
  {
    init_simple_test("Sf_BFu16s_BFu8s");
    static STRUCT_IF_C Sf_BFu16s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu8s, Sf_BFu16s_BFu8s)
//============================================================================


struct  Sf_BFu16s_BFu9i  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu16s_BFu9i) C1{ FC2{} Fs:16 Fi:9}



static void Test_Sf_BFu16s_BFu9i()
{
  {
    init_simple_test("Sf_BFu16s_BFu9i");
    static STRUCT_IF_C Sf_BFu16s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu9i, Sf_BFu16s_BFu9i)
//============================================================================


struct  Sf_BFu16s_BFu9ll  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu16s_BFu9ll) C1{ FC2{} Fs:16 FL:9}



static void Test_Sf_BFu16s_BFu9ll()
{
  {
    init_simple_test("Sf_BFu16s_BFu9ll");
    static STRUCT_IF_C Sf_BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu9ll, Sf_BFu16s_BFu9ll)
//============================================================================


struct  Sf_BFu16s_BFu9s  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu16s_BFu9s) C1{ FC2{} Fs:16 Fs:9}



static void Test_Sf_BFu16s_BFu9s()
{
  {
    init_simple_test("Sf_BFu16s_BFu9s");
    static STRUCT_IF_C Sf_BFu16s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_BFu9s, Sf_BFu16s_BFu9s)
//============================================================================


struct  Sf_BFu16s_C  {
  struct empty v1;
  unsigned short v2:16;
  char v3;
};
//SIG(1 Sf_BFu16s_C) C1{ FC2{} Fs:16 Fc}



static void Test_Sf_BFu16s_C()
{
  {
    init_simple_test("Sf_BFu16s_C");
    static STRUCT_IF_C Sf_BFu16s_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_C");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_C");
    check_field_offset(lv, v3, 2, "Sf_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_C, Sf_BFu16s_C)
//============================================================================


struct  Sf_BFu16s_D  {
  struct empty v1;
  unsigned short v2:16;
  double v3;
};
//SIG(1 Sf_BFu16s_D) C1{ FC2{} Fs:16 FL}



static void Test_Sf_BFu16s_D()
{
  {
    init_simple_test("Sf_BFu16s_D");
    static STRUCT_IF_C Sf_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_D");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_D, Sf_BFu16s_D)
//============================================================================


struct  Sf_BFu16s_F  {
  struct empty v1;
  unsigned short v2:16;
  float v3;
};
//SIG(1 Sf_BFu16s_F) C1{ FC2{} Fs:16 Fi}



static void Test_Sf_BFu16s_F()
{
  {
    init_simple_test("Sf_BFu16s_F");
    static STRUCT_IF_C Sf_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_F");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_F, Sf_BFu16s_F)
//============================================================================


struct  Sf_BFu16s_I  {
  struct empty v1;
  unsigned short v2:16;
  int v3;
};
//SIG(1 Sf_BFu16s_I) C1{ FC2{} Fs:16 Fi}



static void Test_Sf_BFu16s_I()
{
  {
    init_simple_test("Sf_BFu16s_I");
    static STRUCT_IF_C Sf_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_I");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_I, Sf_BFu16s_I)
//============================================================================


struct  Sf_BFu16s_Ip  {
  struct empty v1;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 Sf_BFu16s_Ip) C1{ FC2{} Fs:16 Fp}



static void Test_Sf_BFu16s_Ip()
{
  {
    init_simple_test("Sf_BFu16s_Ip");
    static STRUCT_IF_C Sf_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Ip");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Ip, Sf_BFu16s_Ip)
//============================================================================


struct  Sf_BFu16s_L  {
  struct empty v1;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 Sf_BFu16s_L) C1{ FC2{} Fs:16 FL}



static void Test_Sf_BFu16s_L()
{
  {
    init_simple_test("Sf_BFu16s_L");
    static STRUCT_IF_C Sf_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_L");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_L, Sf_BFu16s_L)
//============================================================================


struct  Sf_BFu16s_S  {
  struct empty v1;
  unsigned short v2:16;
  short v3;
};
//SIG(1 Sf_BFu16s_S) C1{ FC2{} Fs:16 Fs}



static void Test_Sf_BFu16s_S()
{
  {
    init_simple_test("Sf_BFu16s_S");
    static STRUCT_IF_C Sf_BFu16s_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_S");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_S, Sf_BFu16s_S)
//============================================================================


struct  Sf_BFu16s_Sf  {
  struct empty v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Sf_BFu16s_Sf) C1{ FC2{} Fs:16 FC2}



static void Test_Sf_BFu16s_Sf()
{
  {
    init_simple_test("Sf_BFu16s_Sf");
    static STRUCT_IF_C Sf_BFu16s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu16s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Sf");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Sf, Sf_BFu16s_Sf)
//============================================================================


struct  Sf_BFu16s_Uc  {
  struct empty v1;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 Sf_BFu16s_Uc) C1{ FC2{} Fs:16 Fc}



static void Test_Sf_BFu16s_Uc()
{
  {
    init_simple_test("Sf_BFu16s_Uc");
    static STRUCT_IF_C Sf_BFu16s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Uc");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Uc, Sf_BFu16s_Uc)
//============================================================================


struct  Sf_BFu16s_Ui  {
  struct empty v1;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 Sf_BFu16s_Ui) C1{ FC2{} Fs:16 Fi}



static void Test_Sf_BFu16s_Ui()
{
  {
    init_simple_test("Sf_BFu16s_Ui");
    static STRUCT_IF_C Sf_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu16s_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Ui");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Ui, Sf_BFu16s_Ui)
//============================================================================


struct  Sf_BFu16s_Ul  {
  struct empty v1;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 Sf_BFu16s_Ul) C1{ FC2{} Fs:16 FL}



static void Test_Sf_BFu16s_Ul()
{
  {
    init_simple_test("Sf_BFu16s_Ul");
    static STRUCT_IF_C Sf_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Ul");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Ul, Sf_BFu16s_Ul)
//============================================================================


struct  Sf_BFu16s_Us  {
  struct empty v1;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 Sf_BFu16s_Us) C1{ FC2{} Fs:16 Fs}



static void Test_Sf_BFu16s_Us()
{
  {
    init_simple_test("Sf_BFu16s_Us");
    static STRUCT_IF_C Sf_BFu16s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu16s_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Us");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Us, Sf_BFu16s_Us)
//============================================================================


struct  Sf_BFu16s_Vp  {
  struct empty v1;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 Sf_BFu16s_Vp) C1{ FC2{} Fs:16 Fp}



static void Test_Sf_BFu16s_Vp()
{
  {
    init_simple_test("Sf_BFu16s_Vp");
    static STRUCT_IF_C Sf_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu16s_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu16s_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 16, 1, "Sf_BFu16s_Vp");
    set_bf_and_test(lv, v2, 0, 0, 16, hide_ull(1LL<<15), "Sf_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu16s_Vp, Sf_BFu16s_Vp)
//============================================================================


struct  Sf_BFu17i  {
  struct empty v1;
  unsigned int v2:17;
};
//SIG(1 Sf_BFu17i) C1{ FC2{} Fi:17}



static void Test_Sf_BFu17i()
{
  {
    init_simple_test("Sf_BFu17i");
    static STRUCT_IF_C Sf_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i, Sf_BFu17i)
//============================================================================


struct  Sf_BFu17i_BFu15i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu17i_BFu15i) C1{ FC2{} Fi:17 Fi:15}



static void Test_Sf_BFu17i_BFu15i()
{
  {
    init_simple_test("Sf_BFu17i_BFu15i");
    static STRUCT_IF_C Sf_BFu17i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu15i, Sf_BFu17i_BFu15i)
//============================================================================


struct  Sf_BFu17i_BFu15ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu17i_BFu15ll) C1{ FC2{} Fi:17 FL:15}



static void Test_Sf_BFu17i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu15ll");
    static STRUCT_IF_C Sf_BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu15ll, Sf_BFu17i_BFu15ll)
//============================================================================


struct  Sf_BFu17i_BFu15s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu17i_BFu15s) C1{ FC2{} Fi:17 Fs:15}



static void Test_Sf_BFu17i_BFu15s()
{
  {
    init_simple_test("Sf_BFu17i_BFu15s");
    static STRUCT_IF_C Sf_BFu17i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu15s, Sf_BFu17i_BFu15s)
//============================================================================


struct  Sf_BFu17i_BFu16i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu17i_BFu16i) C1{ FC2{} Fi:17 Fi:16}



static void Test_Sf_BFu17i_BFu16i()
{
  {
    init_simple_test("Sf_BFu17i_BFu16i");
    static STRUCT_IF_C Sf_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu16i, Sf_BFu17i_BFu16i)
//============================================================================


struct  Sf_BFu17i_BFu16ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu17i_BFu16ll) C1{ FC2{} Fi:17 FL:16}



static void Test_Sf_BFu17i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu16ll");
    static STRUCT_IF_C Sf_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "Sf_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "Sf_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu16ll, Sf_BFu17i_BFu16ll)
//============================================================================


struct  Sf_BFu17i_BFu16s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu17i_BFu16s) C1{ FC2{} Fi:17 Fs:16}



static void Test_Sf_BFu17i_BFu16s()
{
  {
    init_simple_test("Sf_BFu17i_BFu16s");
    static STRUCT_IF_C Sf_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu16s, Sf_BFu17i_BFu16s)
//============================================================================


struct  Sf_BFu17i_BFu17i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu17i_BFu17i) C1{ FC2{} Fi:17 Fi:17}



static void Test_Sf_BFu17i_BFu17i()
{
  {
    init_simple_test("Sf_BFu17i_BFu17i");
    static STRUCT_IF_C Sf_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu17i, Sf_BFu17i_BFu17i)
//============================================================================


struct  Sf_BFu17i_BFu17ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu17i_BFu17ll) C1{ FC2{} Fi:17 FL:17}



static void Test_Sf_BFu17i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu17ll");
    static STRUCT_IF_C Sf_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "Sf_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu17ll, Sf_BFu17i_BFu17ll)
//============================================================================


struct  Sf_BFu17i_BFu1c  {
  struct empty v1;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu17i_BFu1c) C1{ FC2{} Fi:17 Fc:1}



static void Test_Sf_BFu17i_BFu1c()
{
  {
    init_simple_test("Sf_BFu17i_BFu1c");
    static STRUCT_IF_C Sf_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu1c, Sf_BFu17i_BFu1c)
//============================================================================


struct  Sf_BFu17i_BFu1i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu17i_BFu1i) C1{ FC2{} Fi:17 Fi:1}



static void Test_Sf_BFu17i_BFu1i()
{
  {
    init_simple_test("Sf_BFu17i_BFu1i");
    static STRUCT_IF_C Sf_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu1i, Sf_BFu17i_BFu1i)
//============================================================================


struct  Sf_BFu17i_BFu1ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu17i_BFu1ll) C1{ FC2{} Fi:17 FL:1}



static void Test_Sf_BFu17i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu1ll");
    static STRUCT_IF_C Sf_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu1ll, Sf_BFu17i_BFu1ll)
//============================================================================


struct  Sf_BFu17i_BFu1s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu17i_BFu1s) C1{ FC2{} Fi:17 Fs:1}



static void Test_Sf_BFu17i_BFu1s()
{
  {
    init_simple_test("Sf_BFu17i_BFu1s");
    static STRUCT_IF_C Sf_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu1s, Sf_BFu17i_BFu1s)
//============================================================================


struct  Sf_BFu17i_BFu31i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu17i_BFu31i) C1{ FC2{} Fi:17 Fi:31}



static void Test_Sf_BFu17i_BFu31i()
{
  {
    init_simple_test("Sf_BFu17i_BFu31i");
    static STRUCT_IF_C Sf_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu31i, Sf_BFu17i_BFu31i)
//============================================================================


struct  Sf_BFu17i_BFu31ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu17i_BFu31ll) C1{ FC2{} Fi:17 FL:31}



static void Test_Sf_BFu17i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu31ll");
    static STRUCT_IF_C Sf_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "Sf_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "Sf_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu31ll, Sf_BFu17i_BFu31ll)
//============================================================================


struct  Sf_BFu17i_BFu32i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu17i_BFu32i) C1{ FC2{} Fi:17 Fi:32}



static void Test_Sf_BFu17i_BFu32i()
{
  {
    init_simple_test("Sf_BFu17i_BFu32i");
    static STRUCT_IF_C Sf_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu32i, Sf_BFu17i_BFu32i)
//============================================================================


struct  Sf_BFu17i_BFu32ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu17i_BFu32ll) C1{ FC2{} Fi:17 FL:32}



static void Test_Sf_BFu17i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu32ll");
    static STRUCT_IF_C Sf_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "Sf_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "Sf_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu32ll, Sf_BFu17i_BFu32ll)
//============================================================================


struct  Sf_BFu17i_BFu33  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu17i_BFu33) C1{ FC2{} Fi:17 FL:33}



static void Test_Sf_BFu17i_BFu33()
{
  {
    init_simple_test("Sf_BFu17i_BFu33");
    static STRUCT_IF_C Sf_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "Sf_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "Sf_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu33, Sf_BFu17i_BFu33)
//============================================================================


struct  Sf_BFu17i_BFu7c  {
  struct empty v1;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu17i_BFu7c) C1{ FC2{} Fi:17 Fc:7}



static void Test_Sf_BFu17i_BFu7c()
{
  {
    init_simple_test("Sf_BFu17i_BFu7c");
    static STRUCT_IF_C Sf_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu7c, Sf_BFu17i_BFu7c)
//============================================================================


struct  Sf_BFu17i_BFu7i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu17i_BFu7i) C1{ FC2{} Fi:17 Fi:7}



static void Test_Sf_BFu17i_BFu7i()
{
  {
    init_simple_test("Sf_BFu17i_BFu7i");
    static STRUCT_IF_C Sf_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu7i, Sf_BFu17i_BFu7i)
//============================================================================


struct  Sf_BFu17i_BFu7ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu17i_BFu7ll) C1{ FC2{} Fi:17 FL:7}



static void Test_Sf_BFu17i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu7ll");
    static STRUCT_IF_C Sf_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu7ll, Sf_BFu17i_BFu7ll)
//============================================================================


struct  Sf_BFu17i_BFu7s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu17i_BFu7s) C1{ FC2{} Fi:17 Fs:7}



static void Test_Sf_BFu17i_BFu7s()
{
  {
    init_simple_test("Sf_BFu17i_BFu7s");
    static STRUCT_IF_C Sf_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu7s, Sf_BFu17i_BFu7s)
//============================================================================


struct  Sf_BFu17i_BFu8c  {
  struct empty v1;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu17i_BFu8c) C1{ FC2{} Fi:17 Fc:8}



static void Test_Sf_BFu17i_BFu8c()
{
  {
    init_simple_test("Sf_BFu17i_BFu8c");
    static STRUCT_IF_C Sf_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu8c, Sf_BFu17i_BFu8c)
//============================================================================


struct  Sf_BFu17i_BFu8i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu17i_BFu8i) C1{ FC2{} Fi:17 Fi:8}



static void Test_Sf_BFu17i_BFu8i()
{
  {
    init_simple_test("Sf_BFu17i_BFu8i");
    static STRUCT_IF_C Sf_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu8i, Sf_BFu17i_BFu8i)
//============================================================================


struct  Sf_BFu17i_BFu8ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu17i_BFu8ll) C1{ FC2{} Fi:17 FL:8}



static void Test_Sf_BFu17i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu8ll");
    static STRUCT_IF_C Sf_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu8ll, Sf_BFu17i_BFu8ll)
//============================================================================


struct  Sf_BFu17i_BFu8s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu17i_BFu8s) C1{ FC2{} Fi:17 Fs:8}



static void Test_Sf_BFu17i_BFu8s()
{
  {
    init_simple_test("Sf_BFu17i_BFu8s");
    static STRUCT_IF_C Sf_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu8s, Sf_BFu17i_BFu8s)
//============================================================================


struct  Sf_BFu17i_BFu9i  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu17i_BFu9i) C1{ FC2{} Fi:17 Fi:9}



static void Test_Sf_BFu17i_BFu9i()
{
  {
    init_simple_test("Sf_BFu17i_BFu9i");
    static STRUCT_IF_C Sf_BFu17i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu9i, Sf_BFu17i_BFu9i)
//============================================================================


struct  Sf_BFu17i_BFu9ll  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu17i_BFu9ll) C1{ FC2{} Fi:17 FL:9}



static void Test_Sf_BFu17i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu17i_BFu9ll");
    static STRUCT_IF_C Sf_BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu9ll, Sf_BFu17i_BFu9ll)
//============================================================================


struct  Sf_BFu17i_BFu9s  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu17i_BFu9s) C1{ FC2{} Fi:17 Fs:9}



static void Test_Sf_BFu17i_BFu9s()
{
  {
    init_simple_test("Sf_BFu17i_BFu9s");
    static STRUCT_IF_C Sf_BFu17i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_BFu9s, Sf_BFu17i_BFu9s)
//============================================================================


struct  Sf_BFu17i_C  {
  struct empty v1;
  unsigned int v2:17;
  char v3;
};
//SIG(1 Sf_BFu17i_C) C1{ FC2{} Fi:17 Fc}



static void Test_Sf_BFu17i_C()
{
  {
    init_simple_test("Sf_BFu17i_C");
    static STRUCT_IF_C Sf_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_C");
    check_field_offset(lv, v3, 3, "Sf_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_C, Sf_BFu17i_C)
//============================================================================


struct  Sf_BFu17i_D  {
  struct empty v1;
  unsigned int v2:17;
  double v3;
};
//SIG(1 Sf_BFu17i_D) C1{ FC2{} Fi:17 FL}



static void Test_Sf_BFu17i_D()
{
  {
    init_simple_test("Sf_BFu17i_D");
    static STRUCT_IF_C Sf_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_D, Sf_BFu17i_D)
//============================================================================


struct  Sf_BFu17i_F  {
  struct empty v1;
  unsigned int v2:17;
  float v3;
};
//SIG(1 Sf_BFu17i_F) C1{ FC2{} Fi:17 Fi}



static void Test_Sf_BFu17i_F()
{
  {
    init_simple_test("Sf_BFu17i_F");
    static STRUCT_IF_C Sf_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_F, Sf_BFu17i_F)
//============================================================================


struct  Sf_BFu17i_I  {
  struct empty v1;
  unsigned int v2:17;
  int v3;
};
//SIG(1 Sf_BFu17i_I) C1{ FC2{} Fi:17 Fi}



static void Test_Sf_BFu17i_I()
{
  {
    init_simple_test("Sf_BFu17i_I");
    static STRUCT_IF_C Sf_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_I, Sf_BFu17i_I)
//============================================================================


struct  Sf_BFu17i_Ip  {
  struct empty v1;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 Sf_BFu17i_Ip) C1{ FC2{} Fi:17 Fp}



static void Test_Sf_BFu17i_Ip()
{
  {
    init_simple_test("Sf_BFu17i_Ip");
    static STRUCT_IF_C Sf_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Ip, Sf_BFu17i_Ip)
//============================================================================


struct  Sf_BFu17i_L  {
  struct empty v1;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 Sf_BFu17i_L) C1{ FC2{} Fi:17 FL}



static void Test_Sf_BFu17i_L()
{
  {
    init_simple_test("Sf_BFu17i_L");
    static STRUCT_IF_C Sf_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_L, Sf_BFu17i_L)
//============================================================================


struct  Sf_BFu17i_S  {
  struct empty v1;
  unsigned int v2:17;
  short v3;
};
//SIG(1 Sf_BFu17i_S) C1{ FC2{} Fi:17 Fs}



static void Test_Sf_BFu17i_S()
{
  {
    init_simple_test("Sf_BFu17i_S");
    static STRUCT_IF_C Sf_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_S, Sf_BFu17i_S)
//============================================================================


struct  Sf_BFu17i_Sf  {
  struct empty v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Sf_BFu17i_Sf) C1{ FC2{} Fi:17 FC2}



static void Test_Sf_BFu17i_Sf()
{
  {
    init_simple_test("Sf_BFu17i_Sf");
    static STRUCT_IF_C Sf_BFu17i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Sf, Sf_BFu17i_Sf)
//============================================================================


struct  Sf_BFu17i_Uc  {
  struct empty v1;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 Sf_BFu17i_Uc) C1{ FC2{} Fi:17 Fc}



static void Test_Sf_BFu17i_Uc()
{
  {
    init_simple_test("Sf_BFu17i_Uc");
    static STRUCT_IF_C Sf_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Uc, Sf_BFu17i_Uc)
//============================================================================


struct  Sf_BFu17i_Ui  {
  struct empty v1;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 Sf_BFu17i_Ui) C1{ FC2{} Fi:17 Fi}



static void Test_Sf_BFu17i_Ui()
{
  {
    init_simple_test("Sf_BFu17i_Ui");
    static STRUCT_IF_C Sf_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Ui, Sf_BFu17i_Ui)
//============================================================================


struct  Sf_BFu17i_Ul  {
  struct empty v1;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 Sf_BFu17i_Ul) C1{ FC2{} Fi:17 FL}



static void Test_Sf_BFu17i_Ul()
{
  {
    init_simple_test("Sf_BFu17i_Ul");
    static STRUCT_IF_C Sf_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Ul, Sf_BFu17i_Ul)
//============================================================================


struct  Sf_BFu17i_Us  {
  struct empty v1;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 Sf_BFu17i_Us) C1{ FC2{} Fi:17 Fs}



static void Test_Sf_BFu17i_Us()
{
  {
    init_simple_test("Sf_BFu17i_Us");
    static STRUCT_IF_C Sf_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu17i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Us, Sf_BFu17i_Us)
//============================================================================


struct  Sf_BFu17i_Vp  {
  struct empty v1;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 Sf_BFu17i_Vp) C1{ FC2{} Fi:17 Fp}



static void Test_Sf_BFu17i_Vp()
{
  {
    init_simple_test("Sf_BFu17i_Vp");
    static STRUCT_IF_C Sf_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu17i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17i_Vp, Sf_BFu17i_Vp)
//============================================================================


struct  Sf_BFu17ll  {
  struct empty v1;
  __tsu64 v2:17;
};
//SIG(1 Sf_BFu17ll) C1{ FC2{} FL:17}



static void Test_Sf_BFu17ll()
{
  {
    init_simple_test("Sf_BFu17ll");
    static STRUCT_IF_C Sf_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll, Sf_BFu17ll)
//============================================================================


struct  Sf_BFu17ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu17ll_BFu15i) C1{ FC2{} FL:17 Fi:15}



static void Test_Sf_BFu17ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu15i");
    static STRUCT_IF_C Sf_BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu15i, Sf_BFu17ll_BFu15i)
//============================================================================


struct  Sf_BFu17ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu17ll_BFu15ll) C1{ FC2{} FL:17 FL:15}



static void Test_Sf_BFu17ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu15ll, Sf_BFu17ll_BFu15ll)
//============================================================================


struct  Sf_BFu17ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu17ll_BFu15s) C1{ FC2{} FL:17 Fs:15}



static void Test_Sf_BFu17ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu15s");
    static STRUCT_IF_C Sf_BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "Sf_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "Sf_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu15s, Sf_BFu17ll_BFu15s)
//============================================================================


struct  Sf_BFu17ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu17ll_BFu16i) C1{ FC2{} FL:17 Fi:16}



static void Test_Sf_BFu17ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu16i");
    static STRUCT_IF_C Sf_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu16i, Sf_BFu17ll_BFu16i)
//============================================================================


struct  Sf_BFu17ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu17ll_BFu16ll) C1{ FC2{} FL:17 FL:16}



static void Test_Sf_BFu17ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "Sf_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "Sf_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu16ll, Sf_BFu17ll_BFu16ll)
//============================================================================


struct  Sf_BFu17ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu17ll_BFu16s) C1{ FC2{} FL:17 Fs:16}



static void Test_Sf_BFu17ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu16s");
    static STRUCT_IF_C Sf_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu16s, Sf_BFu17ll_BFu16s)
//============================================================================


struct  Sf_BFu17ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu17ll_BFu17i) C1{ FC2{} FL:17 Fi:17}



static void Test_Sf_BFu17ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu17i");
    static STRUCT_IF_C Sf_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu17i, Sf_BFu17ll_BFu17i)
//============================================================================


struct  Sf_BFu17ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu17ll_BFu17ll) C1{ FC2{} FL:17 FL:17}



static void Test_Sf_BFu17ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "Sf_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu17ll, Sf_BFu17ll_BFu17ll)
//============================================================================


struct  Sf_BFu17ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu17ll_BFu1c) C1{ FC2{} FL:17 Fc:1}



static void Test_Sf_BFu17ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu17ll_BFu1c");
    static STRUCT_IF_C Sf_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu1c, Sf_BFu17ll_BFu1c)
//============================================================================


struct  Sf_BFu17ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu17ll_BFu1i) C1{ FC2{} FL:17 Fi:1}



static void Test_Sf_BFu17ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu1i");
    static STRUCT_IF_C Sf_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu1i, Sf_BFu17ll_BFu1i)
//============================================================================


struct  Sf_BFu17ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu17ll_BFu1ll) C1{ FC2{} FL:17 FL:1}



static void Test_Sf_BFu17ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu1ll, Sf_BFu17ll_BFu1ll)
//============================================================================


struct  Sf_BFu17ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu17ll_BFu1s) C1{ FC2{} FL:17 Fs:1}



static void Test_Sf_BFu17ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu1s");
    static STRUCT_IF_C Sf_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "Sf_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu1s, Sf_BFu17ll_BFu1s)
//============================================================================


struct  Sf_BFu17ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu17ll_BFu31i) C1{ FC2{} FL:17 Fi:31}



static void Test_Sf_BFu17ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu31i");
    static STRUCT_IF_C Sf_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu31i, Sf_BFu17ll_BFu31i)
//============================================================================


struct  Sf_BFu17ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu17ll_BFu31ll) C1{ FC2{} FL:17 FL:31}



static void Test_Sf_BFu17ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "Sf_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "Sf_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu31ll, Sf_BFu17ll_BFu31ll)
//============================================================================


struct  Sf_BFu17ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu17ll_BFu32i) C1{ FC2{} FL:17 Fi:32}



static void Test_Sf_BFu17ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu32i");
    static STRUCT_IF_C Sf_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu32i, Sf_BFu17ll_BFu32i)
//============================================================================


struct  Sf_BFu17ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu17ll_BFu32ll) C1{ FC2{} FL:17 FL:32}



static void Test_Sf_BFu17ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "Sf_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "Sf_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu32ll, Sf_BFu17ll_BFu32ll)
//============================================================================


struct  Sf_BFu17ll_BFu33  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu17ll_BFu33) C1{ FC2{} FL:17 FL:33}



static void Test_Sf_BFu17ll_BFu33()
{
  {
    init_simple_test("Sf_BFu17ll_BFu33");
    static STRUCT_IF_C Sf_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "Sf_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "Sf_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu33, Sf_BFu17ll_BFu33)
//============================================================================


struct  Sf_BFu17ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu17ll_BFu7c) C1{ FC2{} FL:17 Fc:7}



static void Test_Sf_BFu17ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu17ll_BFu7c");
    static STRUCT_IF_C Sf_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu7c, Sf_BFu17ll_BFu7c)
//============================================================================


struct  Sf_BFu17ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu17ll_BFu7i) C1{ FC2{} FL:17 Fi:7}



static void Test_Sf_BFu17ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu7i");
    static STRUCT_IF_C Sf_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu7i, Sf_BFu17ll_BFu7i)
//============================================================================


struct  Sf_BFu17ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu17ll_BFu7ll) C1{ FC2{} FL:17 FL:7}



static void Test_Sf_BFu17ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu7ll, Sf_BFu17ll_BFu7ll)
//============================================================================


struct  Sf_BFu17ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu17ll_BFu7s) C1{ FC2{} FL:17 Fs:7}



static void Test_Sf_BFu17ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu7s");
    static STRUCT_IF_C Sf_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "Sf_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "Sf_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu7s, Sf_BFu17ll_BFu7s)
//============================================================================


struct  Sf_BFu17ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu17ll_BFu8c) C1{ FC2{} FL:17 Fc:8}



static void Test_Sf_BFu17ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu17ll_BFu8c");
    static STRUCT_IF_C Sf_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "Sf_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu8c, Sf_BFu17ll_BFu8c)
//============================================================================


struct  Sf_BFu17ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu17ll_BFu8i) C1{ FC2{} FL:17 Fi:8}



static void Test_Sf_BFu17ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu8i");
    static STRUCT_IF_C Sf_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu8i, Sf_BFu17ll_BFu8i)
//============================================================================


struct  Sf_BFu17ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu17ll_BFu8ll) C1{ FC2{} FL:17 FL:8}



static void Test_Sf_BFu17ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu8ll, Sf_BFu17ll_BFu8ll)
//============================================================================


struct  Sf_BFu17ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu17ll_BFu8s) C1{ FC2{} FL:17 Fs:8}



static void Test_Sf_BFu17ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu8s");
    static STRUCT_IF_C Sf_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "Sf_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "Sf_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu8s, Sf_BFu17ll_BFu8s)
//============================================================================


struct  Sf_BFu17ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu17ll_BFu9i) C1{ FC2{} FL:17 Fi:9}



static void Test_Sf_BFu17ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu17ll_BFu9i");
    static STRUCT_IF_C Sf_BFu17ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu9i, Sf_BFu17ll_BFu9i)
//============================================================================


struct  Sf_BFu17ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu17ll_BFu9ll) C1{ FC2{} FL:17 FL:9}



static void Test_Sf_BFu17ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu17ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu9ll, Sf_BFu17ll_BFu9ll)
//============================================================================


struct  Sf_BFu17ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu17ll_BFu9s) C1{ FC2{} FL:17 Fs:9}



static void Test_Sf_BFu17ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu17ll_BFu9s");
    static STRUCT_IF_C Sf_BFu17ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "Sf_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "Sf_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_BFu9s, Sf_BFu17ll_BFu9s)
//============================================================================


struct  Sf_BFu17ll_C  {
  struct empty v1;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 Sf_BFu17ll_C) C1{ FC2{} FL:17 Fc}



static void Test_Sf_BFu17ll_C()
{
  {
    init_simple_test("Sf_BFu17ll_C");
    static STRUCT_IF_C Sf_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_C");
    check_field_offset(lv, v3, 3, "Sf_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_C, Sf_BFu17ll_C)
//============================================================================


struct  Sf_BFu17ll_D  {
  struct empty v1;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 Sf_BFu17ll_D) C1{ FC2{} FL:17 FL}



static void Test_Sf_BFu17ll_D()
{
  {
    init_simple_test("Sf_BFu17ll_D");
    static STRUCT_IF_C Sf_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_D, Sf_BFu17ll_D)
//============================================================================


struct  Sf_BFu17ll_F  {
  struct empty v1;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 Sf_BFu17ll_F) C1{ FC2{} FL:17 Fi}



static void Test_Sf_BFu17ll_F()
{
  {
    init_simple_test("Sf_BFu17ll_F");
    static STRUCT_IF_C Sf_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_F, Sf_BFu17ll_F)
//============================================================================


struct  Sf_BFu17ll_I  {
  struct empty v1;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 Sf_BFu17ll_I) C1{ FC2{} FL:17 Fi}



static void Test_Sf_BFu17ll_I()
{
  {
    init_simple_test("Sf_BFu17ll_I");
    static STRUCT_IF_C Sf_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_I, Sf_BFu17ll_I)
//============================================================================


struct  Sf_BFu17ll_Ip  {
  struct empty v1;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 Sf_BFu17ll_Ip) C1{ FC2{} FL:17 Fp}



static void Test_Sf_BFu17ll_Ip()
{
  {
    init_simple_test("Sf_BFu17ll_Ip");
    static STRUCT_IF_C Sf_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Ip, Sf_BFu17ll_Ip)
//============================================================================


struct  Sf_BFu17ll_L  {
  struct empty v1;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 Sf_BFu17ll_L) C1{ FC2{} FL:17 FL}



static void Test_Sf_BFu17ll_L()
{
  {
    init_simple_test("Sf_BFu17ll_L");
    static STRUCT_IF_C Sf_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_L, Sf_BFu17ll_L)
//============================================================================


struct  Sf_BFu17ll_S  {
  struct empty v1;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 Sf_BFu17ll_S) C1{ FC2{} FL:17 Fs}



static void Test_Sf_BFu17ll_S()
{
  {
    init_simple_test("Sf_BFu17ll_S");
    static STRUCT_IF_C Sf_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_S, Sf_BFu17ll_S)
//============================================================================


struct  Sf_BFu17ll_Sf  {
  struct empty v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Sf_BFu17ll_Sf) C1{ FC2{} FL:17 FC2}



static void Test_Sf_BFu17ll_Sf()
{
  {
    init_simple_test("Sf_BFu17ll_Sf");
    static STRUCT_IF_C Sf_BFu17ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Sf");
    check_field_offset(lv, v3, 3, "Sf_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Sf, Sf_BFu17ll_Sf)
//============================================================================


struct  Sf_BFu17ll_Uc  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 Sf_BFu17ll_Uc) C1{ FC2{} FL:17 Fc}



static void Test_Sf_BFu17ll_Uc()
{
  {
    init_simple_test("Sf_BFu17ll_Uc");
    static STRUCT_IF_C Sf_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Uc");
    check_field_offset(lv, v3, 3, "Sf_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Uc, Sf_BFu17ll_Uc)
//============================================================================


struct  Sf_BFu17ll_Ui  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 Sf_BFu17ll_Ui) C1{ FC2{} FL:17 Fi}



static void Test_Sf_BFu17ll_Ui()
{
  {
    init_simple_test("Sf_BFu17ll_Ui");
    static STRUCT_IF_C Sf_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Ui, Sf_BFu17ll_Ui)
//============================================================================


struct  Sf_BFu17ll_Ul  {
  struct empty v1;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 Sf_BFu17ll_Ul) C1{ FC2{} FL:17 FL}



static void Test_Sf_BFu17ll_Ul()
{
  {
    init_simple_test("Sf_BFu17ll_Ul");
    static STRUCT_IF_C Sf_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Ul, Sf_BFu17ll_Ul)
//============================================================================


struct  Sf_BFu17ll_Us  {
  struct empty v1;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 Sf_BFu17ll_Us) C1{ FC2{} FL:17 Fs}



static void Test_Sf_BFu17ll_Us()
{
  {
    init_simple_test("Sf_BFu17ll_Us");
    static STRUCT_IF_C Sf_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Us, Sf_BFu17ll_Us)
//============================================================================


struct  Sf_BFu17ll_Vp  {
  struct empty v1;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 Sf_BFu17ll_Vp) C1{ FC2{} FL:17 Fp}



static void Test_Sf_BFu17ll_Vp()
{
  {
    init_simple_test("Sf_BFu17ll_Vp");
    static STRUCT_IF_C Sf_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu17ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu17ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 17, 1, "Sf_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 17, hide_ull(1LL<<16), "Sf_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu17ll_Vp, Sf_BFu17ll_Vp)
//============================================================================


struct  Sf_BFu1c  {
  struct empty v1;
  unsigned char v2:1;
};
//SIG(1 Sf_BFu1c) C1{ FC2{} Fc:1}



static void Test_Sf_BFu1c()
{
  {
    init_simple_test("Sf_BFu1c");
    static STRUCT_IF_C Sf_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c, Sf_BFu1c)
//============================================================================


struct  Sf_BFu1c_BFu15i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu1c_BFu15i) C1{ FC2{} Fc:1 Fi:15}



static void Test_Sf_BFu1c_BFu15i()
{
  {
    init_simple_test("Sf_BFu1c_BFu15i");
    static STRUCT_IF_C Sf_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu15i, Sf_BFu1c_BFu15i)
//============================================================================


struct  Sf_BFu1c_BFu15ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu1c_BFu15ll) C1{ FC2{} Fc:1 FL:15}



static void Test_Sf_BFu1c_BFu15ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu15ll");
    static STRUCT_IF_C Sf_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu15ll, Sf_BFu1c_BFu15ll)
//============================================================================


struct  Sf_BFu1c_BFu15s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu1c_BFu15s) C1{ FC2{} Fc:1 Fs:15}



static void Test_Sf_BFu1c_BFu15s()
{
  {
    init_simple_test("Sf_BFu1c_BFu15s");
    static STRUCT_IF_C Sf_BFu1c_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu15s, Sf_BFu1c_BFu15s)
//============================================================================


struct  Sf_BFu1c_BFu16i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu1c_BFu16i) C1{ FC2{} Fc:1 Fi:16}



static void Test_Sf_BFu1c_BFu16i()
{
  {
    init_simple_test("Sf_BFu1c_BFu16i");
    static STRUCT_IF_C Sf_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu16i, Sf_BFu1c_BFu16i)
//============================================================================


struct  Sf_BFu1c_BFu16ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu1c_BFu16ll) C1{ FC2{} Fc:1 FL:16}



static void Test_Sf_BFu1c_BFu16ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu16ll");
    static STRUCT_IF_C Sf_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu16ll, Sf_BFu1c_BFu16ll)
//============================================================================


struct  Sf_BFu1c_BFu16s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu1c_BFu16s) C1{ FC2{} Fc:1 Fs:16}



static void Test_Sf_BFu1c_BFu16s()
{
  {
    init_simple_test("Sf_BFu1c_BFu16s");
    static STRUCT_IF_C Sf_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu16s, Sf_BFu1c_BFu16s)
//============================================================================


struct  Sf_BFu1c_BFu17i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu1c_BFu17i) C1{ FC2{} Fc:1 Fi:17}



static void Test_Sf_BFu1c_BFu17i()
{
  {
    init_simple_test("Sf_BFu1c_BFu17i");
    static STRUCT_IF_C Sf_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu17i, Sf_BFu1c_BFu17i)
//============================================================================


struct  Sf_BFu1c_BFu17ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu1c_BFu17ll) C1{ FC2{} Fc:1 FL:17}



static void Test_Sf_BFu1c_BFu17ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu17ll");
    static STRUCT_IF_C Sf_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu17ll, Sf_BFu1c_BFu17ll)
//============================================================================


struct  Sf_BFu1c_BFu1c  {
  struct empty v1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu1c_BFu1c) C1{ FC2{} Fc:1 Fc:1}



static void Test_Sf_BFu1c_BFu1c()
{
  {
    init_simple_test("Sf_BFu1c_BFu1c");
    static STRUCT_IF_C Sf_BFu1c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu1c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu1c, Sf_BFu1c_BFu1c)
//============================================================================


struct  Sf_BFu1c_BFu1i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu1c_BFu1i) C1{ FC2{} Fc:1 Fi:1}



static void Test_Sf_BFu1c_BFu1i()
{
  {
    init_simple_test("Sf_BFu1c_BFu1i");
    static STRUCT_IF_C Sf_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu1i, Sf_BFu1c_BFu1i)
//============================================================================


struct  Sf_BFu1c_BFu1ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu1c_BFu1ll) C1{ FC2{} Fc:1 FL:1}



static void Test_Sf_BFu1c_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu1ll");
    static STRUCT_IF_C Sf_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu1ll, Sf_BFu1c_BFu1ll)
//============================================================================


struct  Sf_BFu1c_BFu1s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu1c_BFu1s) C1{ FC2{} Fc:1 Fs:1}



static void Test_Sf_BFu1c_BFu1s()
{
  {
    init_simple_test("Sf_BFu1c_BFu1s");
    static STRUCT_IF_C Sf_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu1s, Sf_BFu1c_BFu1s)
//============================================================================


struct  Sf_BFu1c_BFu31i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu1c_BFu31i) C1{ FC2{} Fc:1 Fi:31}



static void Test_Sf_BFu1c_BFu31i()
{
  {
    init_simple_test("Sf_BFu1c_BFu31i");
    static STRUCT_IF_C Sf_BFu1c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu31i, Sf_BFu1c_BFu31i)
//============================================================================


struct  Sf_BFu1c_BFu31ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu1c_BFu31ll) C1{ FC2{} Fc:1 FL:31}



static void Test_Sf_BFu1c_BFu31ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu31ll");
    static STRUCT_IF_C Sf_BFu1c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu31ll, Sf_BFu1c_BFu31ll)
//============================================================================


struct  Sf_BFu1c_BFu32i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu1c_BFu32i) C1{ FC2{} Fc:1 Fi:32}



static void Test_Sf_BFu1c_BFu32i()
{
  {
    init_simple_test("Sf_BFu1c_BFu32i");
    static STRUCT_IF_C Sf_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu32i, Sf_BFu1c_BFu32i)
//============================================================================


struct  Sf_BFu1c_BFu32ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu1c_BFu32ll) C1{ FC2{} Fc:1 FL:32}



static void Test_Sf_BFu1c_BFu32ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu32ll");
    static STRUCT_IF_C Sf_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, 1, "Sf_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, hide_ull(1LL<<31), "Sf_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu32ll, Sf_BFu1c_BFu32ll)
//============================================================================


struct  Sf_BFu1c_BFu33  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu1c_BFu33) C1{ FC2{} Fc:1 FL:33}



static void Test_Sf_BFu1c_BFu33()
{
  {
    init_simple_test("Sf_BFu1c_BFu33");
    static STRUCT_IF_C Sf_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, 1, "Sf_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, hide_ull(1LL<<32), "Sf_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu33, Sf_BFu1c_BFu33)
//============================================================================


struct  Sf_BFu1c_BFu7c  {
  struct empty v1;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu1c_BFu7c) C1{ FC2{} Fc:1 Fc:7}



static void Test_Sf_BFu1c_BFu7c()
{
  {
    init_simple_test("Sf_BFu1c_BFu7c");
    static STRUCT_IF_C Sf_BFu1c_BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu1c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu7c, Sf_BFu1c_BFu7c)
//============================================================================


struct  Sf_BFu1c_BFu7i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu1c_BFu7i) C1{ FC2{} Fc:1 Fi:7}



static void Test_Sf_BFu1c_BFu7i()
{
  {
    init_simple_test("Sf_BFu1c_BFu7i");
    static STRUCT_IF_C Sf_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu7i, Sf_BFu1c_BFu7i)
//============================================================================


struct  Sf_BFu1c_BFu7ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu1c_BFu7ll) C1{ FC2{} Fc:1 FL:7}



static void Test_Sf_BFu1c_BFu7ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu7ll");
    static STRUCT_IF_C Sf_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu7ll, Sf_BFu1c_BFu7ll)
//============================================================================


struct  Sf_BFu1c_BFu7s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu1c_BFu7s) C1{ FC2{} Fc:1 Fs:7}



static void Test_Sf_BFu1c_BFu7s()
{
  {
    init_simple_test("Sf_BFu1c_BFu7s");
    static STRUCT_IF_C Sf_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu7s, Sf_BFu1c_BFu7s)
//============================================================================


struct  Sf_BFu1c_BFu8c  {
  struct empty v1;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu1c_BFu8c) C1{ FC2{} Fc:1 Fc:8}



static void Test_Sf_BFu1c_BFu8c()
{
  {
    init_simple_test("Sf_BFu1c_BFu8c");
    static STRUCT_IF_C Sf_BFu1c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu8c, Sf_BFu1c_BFu8c)
//============================================================================


struct  Sf_BFu1c_BFu8i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu1c_BFu8i) C1{ FC2{} Fc:1 Fi:8}



static void Test_Sf_BFu1c_BFu8i()
{
  {
    init_simple_test("Sf_BFu1c_BFu8i");
    static STRUCT_IF_C Sf_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu8i, Sf_BFu1c_BFu8i)
//============================================================================


struct  Sf_BFu1c_BFu8ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu1c_BFu8ll) C1{ FC2{} Fc:1 FL:8}



static void Test_Sf_BFu1c_BFu8ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu8ll");
    static STRUCT_IF_C Sf_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu8ll, Sf_BFu1c_BFu8ll)
//============================================================================


struct  Sf_BFu1c_BFu8s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu1c_BFu8s) C1{ FC2{} Fc:1 Fs:8}



static void Test_Sf_BFu1c_BFu8s()
{
  {
    init_simple_test("Sf_BFu1c_BFu8s");
    static STRUCT_IF_C Sf_BFu1c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu8s, Sf_BFu1c_BFu8s)
//============================================================================


struct  Sf_BFu1c_BFu9i  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu1c_BFu9i) C1{ FC2{} Fc:1 Fi:9}



static void Test_Sf_BFu1c_BFu9i()
{
  {
    init_simple_test("Sf_BFu1c_BFu9i");
    static STRUCT_IF_C Sf_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu9i, Sf_BFu1c_BFu9i)
//============================================================================


struct  Sf_BFu1c_BFu9ll  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu1c_BFu9ll) C1{ FC2{} Fc:1 FL:9}



static void Test_Sf_BFu1c_BFu9ll()
{
  {
    init_simple_test("Sf_BFu1c_BFu9ll");
    static STRUCT_IF_C Sf_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu9ll, Sf_BFu1c_BFu9ll)
//============================================================================


struct  Sf_BFu1c_BFu9s  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu1c_BFu9s) C1{ FC2{} Fc:1 Fs:9}



static void Test_Sf_BFu1c_BFu9s()
{
  {
    init_simple_test("Sf_BFu1c_BFu9s");
    static STRUCT_IF_C Sf_BFu1c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_BFu9s, Sf_BFu1c_BFu9s)
//============================================================================


struct  Sf_BFu1c_C  {
  struct empty v1;
  unsigned char v2:1;
  char v3;
};
//SIG(1 Sf_BFu1c_C) C1{ FC2{} Fc:1 Fc}



static void Test_Sf_BFu1c_C()
{
  {
    init_simple_test("Sf_BFu1c_C");
    static STRUCT_IF_C Sf_BFu1c_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_C");
    check_field_offset(lv, v3, 1, "Sf_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_C, Sf_BFu1c_C)
//============================================================================


struct  Sf_BFu1c_D  {
  struct empty v1;
  unsigned char v2:1;
  double v3;
};
//SIG(1 Sf_BFu1c_D) C1{ FC2{} Fc:1 FL}



static void Test_Sf_BFu1c_D()
{
  {
    init_simple_test("Sf_BFu1c_D");
    static STRUCT_IF_C Sf_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_D, Sf_BFu1c_D)
//============================================================================


struct  Sf_BFu1c_F  {
  struct empty v1;
  unsigned char v2:1;
  float v3;
};
//SIG(1 Sf_BFu1c_F) C1{ FC2{} Fc:1 Fi}



static void Test_Sf_BFu1c_F()
{
  {
    init_simple_test("Sf_BFu1c_F");
    static STRUCT_IF_C Sf_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_F, Sf_BFu1c_F)
//============================================================================


struct  Sf_BFu1c_I  {
  struct empty v1;
  unsigned char v2:1;
  int v3;
};
//SIG(1 Sf_BFu1c_I) C1{ FC2{} Fc:1 Fi}



static void Test_Sf_BFu1c_I()
{
  {
    init_simple_test("Sf_BFu1c_I");
    static STRUCT_IF_C Sf_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_I, Sf_BFu1c_I)
//============================================================================


struct  Sf_BFu1c_Ip  {
  struct empty v1;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 Sf_BFu1c_Ip) C1{ FC2{} Fc:1 Fp}



static void Test_Sf_BFu1c_Ip()
{
  {
    init_simple_test("Sf_BFu1c_Ip");
    static STRUCT_IF_C Sf_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Ip, Sf_BFu1c_Ip)
//============================================================================


struct  Sf_BFu1c_L  {
  struct empty v1;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 Sf_BFu1c_L) C1{ FC2{} Fc:1 FL}



static void Test_Sf_BFu1c_L()
{
  {
    init_simple_test("Sf_BFu1c_L");
    static STRUCT_IF_C Sf_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_L, Sf_BFu1c_L)
//============================================================================


struct  Sf_BFu1c_S  {
  struct empty v1;
  unsigned char v2:1;
  short v3;
};
//SIG(1 Sf_BFu1c_S) C1{ FC2{} Fc:1 Fs}



static void Test_Sf_BFu1c_S()
{
  {
    init_simple_test("Sf_BFu1c_S");
    static STRUCT_IF_C Sf_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_S, Sf_BFu1c_S)
//============================================================================


struct  Sf_BFu1c_Sf  {
  struct empty v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Sf_BFu1c_Sf) C1{ FC2{} Fc:1 FC2}



static void Test_Sf_BFu1c_Sf()
{
  {
    init_simple_test("Sf_BFu1c_Sf");
    static STRUCT_IF_C Sf_BFu1c_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu1c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Sf, Sf_BFu1c_Sf)
//============================================================================


struct  Sf_BFu1c_Uc  {
  struct empty v1;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 Sf_BFu1c_Uc) C1{ FC2{} Fc:1 Fc}



static void Test_Sf_BFu1c_Uc()
{
  {
    init_simple_test("Sf_BFu1c_Uc");
    static STRUCT_IF_C Sf_BFu1c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu1c_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Uc, Sf_BFu1c_Uc)
//============================================================================


struct  Sf_BFu1c_Ui  {
  struct empty v1;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 Sf_BFu1c_Ui) C1{ FC2{} Fc:1 Fi}



static void Test_Sf_BFu1c_Ui()
{
  {
    init_simple_test("Sf_BFu1c_Ui");
    static STRUCT_IF_C Sf_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1c_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Ui, Sf_BFu1c_Ui)
//============================================================================


struct  Sf_BFu1c_Ul  {
  struct empty v1;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 Sf_BFu1c_Ul) C1{ FC2{} Fc:1 FL}



static void Test_Sf_BFu1c_Ul()
{
  {
    init_simple_test("Sf_BFu1c_Ul");
    static STRUCT_IF_C Sf_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Ul, Sf_BFu1c_Ul)
//============================================================================


struct  Sf_BFu1c_Us  {
  struct empty v1;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 Sf_BFu1c_Us) C1{ FC2{} Fc:1 Fs}



static void Test_Sf_BFu1c_Us()
{
  {
    init_simple_test("Sf_BFu1c_Us");
    static STRUCT_IF_C Sf_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1c_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Us, Sf_BFu1c_Us)
//============================================================================


struct  Sf_BFu1c_Vp  {
  struct empty v1;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 Sf_BFu1c_Vp) C1{ FC2{} Fc:1 Fp}



static void Test_Sf_BFu1c_Vp()
{
  {
    init_simple_test("Sf_BFu1c_Vp");
    static STRUCT_IF_C Sf_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1c_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu1c_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1c_Vp, Sf_BFu1c_Vp)
//============================================================================


struct  Sf_BFu1i  {
  struct empty v1;
  unsigned int v2:1;
};
//SIG(1 Sf_BFu1i) C1{ FC2{} Fi:1}



static void Test_Sf_BFu1i()
{
  {
    init_simple_test("Sf_BFu1i");
    static STRUCT_IF_C Sf_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i, Sf_BFu1i)
//============================================================================


struct  Sf_BFu1i_BFu15i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu1i_BFu15i) C1{ FC2{} Fi:1 Fi:15}



static void Test_Sf_BFu1i_BFu15i()
{
  {
    init_simple_test("Sf_BFu1i_BFu15i");
    static STRUCT_IF_C Sf_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu15i, Sf_BFu1i_BFu15i)
//============================================================================


struct  Sf_BFu1i_BFu15ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu1i_BFu15ll) C1{ FC2{} Fi:1 FL:15}



static void Test_Sf_BFu1i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu15ll");
    static STRUCT_IF_C Sf_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu15ll, Sf_BFu1i_BFu15ll)
//============================================================================


struct  Sf_BFu1i_BFu15s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu1i_BFu15s) C1{ FC2{} Fi:1 Fs:15}



static void Test_Sf_BFu1i_BFu15s()
{
  {
    init_simple_test("Sf_BFu1i_BFu15s");
    static STRUCT_IF_C Sf_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu15s, Sf_BFu1i_BFu15s)
//============================================================================


struct  Sf_BFu1i_BFu16i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu1i_BFu16i) C1{ FC2{} Fi:1 Fi:16}



static void Test_Sf_BFu1i_BFu16i()
{
  {
    init_simple_test("Sf_BFu1i_BFu16i");
    static STRUCT_IF_C Sf_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu16i, Sf_BFu1i_BFu16i)
//============================================================================


struct  Sf_BFu1i_BFu16ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu1i_BFu16ll) C1{ FC2{} Fi:1 FL:16}



static void Test_Sf_BFu1i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu16ll");
    static STRUCT_IF_C Sf_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu16ll, Sf_BFu1i_BFu16ll)
//============================================================================


struct  Sf_BFu1i_BFu16s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu1i_BFu16s) C1{ FC2{} Fi:1 Fs:16}



static void Test_Sf_BFu1i_BFu16s()
{
  {
    init_simple_test("Sf_BFu1i_BFu16s");
    static STRUCT_IF_C Sf_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu16s, Sf_BFu1i_BFu16s)
//============================================================================


struct  Sf_BFu1i_BFu17i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu1i_BFu17i) C1{ FC2{} Fi:1 Fi:17}



static void Test_Sf_BFu1i_BFu17i()
{
  {
    init_simple_test("Sf_BFu1i_BFu17i");
    static STRUCT_IF_C Sf_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu17i, Sf_BFu1i_BFu17i)
//============================================================================


struct  Sf_BFu1i_BFu17ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu1i_BFu17ll) C1{ FC2{} Fi:1 FL:17}



static void Test_Sf_BFu1i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu17ll");
    static STRUCT_IF_C Sf_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu17ll, Sf_BFu1i_BFu17ll)
//============================================================================


struct  Sf_BFu1i_BFu1c  {
  struct empty v1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu1i_BFu1c) C1{ FC2{} Fi:1 Fc:1}



static void Test_Sf_BFu1i_BFu1c()
{
  {
    init_simple_test("Sf_BFu1i_BFu1c");
    static STRUCT_IF_C Sf_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu1c, Sf_BFu1i_BFu1c)
//============================================================================


struct  Sf_BFu1i_BFu1i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu1i_BFu1i) C1{ FC2{} Fi:1 Fi:1}



static void Test_Sf_BFu1i_BFu1i()
{
  {
    init_simple_test("Sf_BFu1i_BFu1i");
    static STRUCT_IF_C Sf_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu1i, Sf_BFu1i_BFu1i)
//============================================================================


struct  Sf_BFu1i_BFu1ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu1i_BFu1ll) C1{ FC2{} Fi:1 FL:1}



static void Test_Sf_BFu1i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu1ll");
    static STRUCT_IF_C Sf_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu1ll, Sf_BFu1i_BFu1ll)
//============================================================================


struct  Sf_BFu1i_BFu1s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu1i_BFu1s) C1{ FC2{} Fi:1 Fs:1}



static void Test_Sf_BFu1i_BFu1s()
{
  {
    init_simple_test("Sf_BFu1i_BFu1s");
    static STRUCT_IF_C Sf_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu1s, Sf_BFu1i_BFu1s)
//============================================================================


struct  Sf_BFu1i_BFu31i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu1i_BFu31i) C1{ FC2{} Fi:1 Fi:31}



static void Test_Sf_BFu1i_BFu31i()
{
  {
    init_simple_test("Sf_BFu1i_BFu31i");
    static STRUCT_IF_C Sf_BFu1i_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu31i, Sf_BFu1i_BFu31i)
//============================================================================


struct  Sf_BFu1i_BFu31ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu1i_BFu31ll) C1{ FC2{} Fi:1 FL:31}



static void Test_Sf_BFu1i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu31ll");
    static STRUCT_IF_C Sf_BFu1i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu31ll, Sf_BFu1i_BFu31ll)
//============================================================================


struct  Sf_BFu1i_BFu32i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu1i_BFu32i) C1{ FC2{} Fi:1 Fi:32}



static void Test_Sf_BFu1i_BFu32i()
{
  {
    init_simple_test("Sf_BFu1i_BFu32i");
    static STRUCT_IF_C Sf_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu32i, Sf_BFu1i_BFu32i)
//============================================================================


struct  Sf_BFu1i_BFu32ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu1i_BFu32ll) C1{ FC2{} Fi:1 FL:32}



static void Test_Sf_BFu1i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu32ll");
    static STRUCT_IF_C Sf_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, 1, "Sf_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, hide_ull(1LL<<31), "Sf_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu32ll, Sf_BFu1i_BFu32ll)
//============================================================================


struct  Sf_BFu1i_BFu33  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu1i_BFu33) C1{ FC2{} Fi:1 FL:33}



static void Test_Sf_BFu1i_BFu33()
{
  {
    init_simple_test("Sf_BFu1i_BFu33");
    static STRUCT_IF_C Sf_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, 1, "Sf_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, hide_ull(1LL<<32), "Sf_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu33, Sf_BFu1i_BFu33)
//============================================================================


struct  Sf_BFu1i_BFu7c  {
  struct empty v1;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu1i_BFu7c) C1{ FC2{} Fi:1 Fc:7}



static void Test_Sf_BFu1i_BFu7c()
{
  {
    init_simple_test("Sf_BFu1i_BFu7c");
    static STRUCT_IF_C Sf_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu7c, Sf_BFu1i_BFu7c)
//============================================================================


struct  Sf_BFu1i_BFu7i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu1i_BFu7i) C1{ FC2{} Fi:1 Fi:7}



static void Test_Sf_BFu1i_BFu7i()
{
  {
    init_simple_test("Sf_BFu1i_BFu7i");
    static STRUCT_IF_C Sf_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu7i, Sf_BFu1i_BFu7i)
//============================================================================


struct  Sf_BFu1i_BFu7ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu1i_BFu7ll) C1{ FC2{} Fi:1 FL:7}



static void Test_Sf_BFu1i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu7ll");
    static STRUCT_IF_C Sf_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu7ll, Sf_BFu1i_BFu7ll)
//============================================================================


struct  Sf_BFu1i_BFu7s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu1i_BFu7s) C1{ FC2{} Fi:1 Fs:7}



static void Test_Sf_BFu1i_BFu7s()
{
  {
    init_simple_test("Sf_BFu1i_BFu7s");
    static STRUCT_IF_C Sf_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu7s, Sf_BFu1i_BFu7s)
//============================================================================


struct  Sf_BFu1i_BFu8c  {
  struct empty v1;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu1i_BFu8c) C1{ FC2{} Fi:1 Fc:8}



static void Test_Sf_BFu1i_BFu8c()
{
  {
    init_simple_test("Sf_BFu1i_BFu8c");
    static STRUCT_IF_C Sf_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu8c, Sf_BFu1i_BFu8c)
//============================================================================


struct  Sf_BFu1i_BFu8i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu1i_BFu8i) C1{ FC2{} Fi:1 Fi:8}



static void Test_Sf_BFu1i_BFu8i()
{
  {
    init_simple_test("Sf_BFu1i_BFu8i");
    static STRUCT_IF_C Sf_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu8i, Sf_BFu1i_BFu8i)
//============================================================================


struct  Sf_BFu1i_BFu8ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu1i_BFu8ll) C1{ FC2{} Fi:1 FL:8}



static void Test_Sf_BFu1i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu8ll");
    static STRUCT_IF_C Sf_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu8ll, Sf_BFu1i_BFu8ll)
//============================================================================


struct  Sf_BFu1i_BFu8s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu1i_BFu8s) C1{ FC2{} Fi:1 Fs:8}



static void Test_Sf_BFu1i_BFu8s()
{
  {
    init_simple_test("Sf_BFu1i_BFu8s");
    static STRUCT_IF_C Sf_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu8s, Sf_BFu1i_BFu8s)
//============================================================================


struct  Sf_BFu1i_BFu9i  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu1i_BFu9i) C1{ FC2{} Fi:1 Fi:9}



static void Test_Sf_BFu1i_BFu9i()
{
  {
    init_simple_test("Sf_BFu1i_BFu9i");
    static STRUCT_IF_C Sf_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu9i, Sf_BFu1i_BFu9i)
//============================================================================


struct  Sf_BFu1i_BFu9ll  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu1i_BFu9ll) C1{ FC2{} Fi:1 FL:9}



static void Test_Sf_BFu1i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu1i_BFu9ll");
    static STRUCT_IF_C Sf_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu9ll, Sf_BFu1i_BFu9ll)
//============================================================================


struct  Sf_BFu1i_BFu9s  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu1i_BFu9s) C1{ FC2{} Fi:1 Fs:9}



static void Test_Sf_BFu1i_BFu9s()
{
  {
    init_simple_test("Sf_BFu1i_BFu9s");
    static STRUCT_IF_C Sf_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_BFu9s, Sf_BFu1i_BFu9s)
//============================================================================


struct  Sf_BFu1i_C  {
  struct empty v1;
  unsigned int v2:1;
  char v3;
};
//SIG(1 Sf_BFu1i_C) C1{ FC2{} Fi:1 Fc}



static void Test_Sf_BFu1i_C()
{
  {
    init_simple_test("Sf_BFu1i_C");
    static STRUCT_IF_C Sf_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_C");
    check_field_offset(lv, v3, 1, "Sf_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_C, Sf_BFu1i_C)
//============================================================================


struct  Sf_BFu1i_D  {
  struct empty v1;
  unsigned int v2:1;
  double v3;
};
//SIG(1 Sf_BFu1i_D) C1{ FC2{} Fi:1 FL}



static void Test_Sf_BFu1i_D()
{
  {
    init_simple_test("Sf_BFu1i_D");
    static STRUCT_IF_C Sf_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_D, Sf_BFu1i_D)
//============================================================================


struct  Sf_BFu1i_F  {
  struct empty v1;
  unsigned int v2:1;
  float v3;
};
//SIG(1 Sf_BFu1i_F) C1{ FC2{} Fi:1 Fi}



static void Test_Sf_BFu1i_F()
{
  {
    init_simple_test("Sf_BFu1i_F");
    static STRUCT_IF_C Sf_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_F, Sf_BFu1i_F)
//============================================================================


struct  Sf_BFu1i_I  {
  struct empty v1;
  unsigned int v2:1;
  int v3;
};
//SIG(1 Sf_BFu1i_I) C1{ FC2{} Fi:1 Fi}



static void Test_Sf_BFu1i_I()
{
  {
    init_simple_test("Sf_BFu1i_I");
    static STRUCT_IF_C Sf_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_I, Sf_BFu1i_I)
//============================================================================


struct  Sf_BFu1i_Ip  {
  struct empty v1;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 Sf_BFu1i_Ip) C1{ FC2{} Fi:1 Fp}



static void Test_Sf_BFu1i_Ip()
{
  {
    init_simple_test("Sf_BFu1i_Ip");
    static STRUCT_IF_C Sf_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Ip, Sf_BFu1i_Ip)
//============================================================================


struct  Sf_BFu1i_L  {
  struct empty v1;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 Sf_BFu1i_L) C1{ FC2{} Fi:1 FL}



static void Test_Sf_BFu1i_L()
{
  {
    init_simple_test("Sf_BFu1i_L");
    static STRUCT_IF_C Sf_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_L, Sf_BFu1i_L)
//============================================================================


struct  Sf_BFu1i_S  {
  struct empty v1;
  unsigned int v2:1;
  short v3;
};
//SIG(1 Sf_BFu1i_S) C1{ FC2{} Fi:1 Fs}



static void Test_Sf_BFu1i_S()
{
  {
    init_simple_test("Sf_BFu1i_S");
    static STRUCT_IF_C Sf_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_S, Sf_BFu1i_S)
//============================================================================


struct  Sf_BFu1i_Sf  {
  struct empty v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Sf_BFu1i_Sf) C1{ FC2{} Fi:1 FC2}



static void Test_Sf_BFu1i_Sf()
{
  {
    init_simple_test("Sf_BFu1i_Sf");
    static STRUCT_IF_C Sf_BFu1i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Sf, Sf_BFu1i_Sf)
//============================================================================


struct  Sf_BFu1i_Uc  {
  struct empty v1;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 Sf_BFu1i_Uc) C1{ FC2{} Fi:1 Fc}



static void Test_Sf_BFu1i_Uc()
{
  {
    init_simple_test("Sf_BFu1i_Uc");
    static STRUCT_IF_C Sf_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Uc, Sf_BFu1i_Uc)
//============================================================================


struct  Sf_BFu1i_Ui  {
  struct empty v1;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 Sf_BFu1i_Ui) C1{ FC2{} Fi:1 Fi}



static void Test_Sf_BFu1i_Ui()
{
  {
    init_simple_test("Sf_BFu1i_Ui");
    static STRUCT_IF_C Sf_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Ui, Sf_BFu1i_Ui)
//============================================================================


struct  Sf_BFu1i_Ul  {
  struct empty v1;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 Sf_BFu1i_Ul) C1{ FC2{} Fi:1 FL}



static void Test_Sf_BFu1i_Ul()
{
  {
    init_simple_test("Sf_BFu1i_Ul");
    static STRUCT_IF_C Sf_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Ul, Sf_BFu1i_Ul)
//============================================================================


struct  Sf_BFu1i_Us  {
  struct empty v1;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 Sf_BFu1i_Us) C1{ FC2{} Fi:1 Fs}



static void Test_Sf_BFu1i_Us()
{
  {
    init_simple_test("Sf_BFu1i_Us");
    static STRUCT_IF_C Sf_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Us, Sf_BFu1i_Us)
//============================================================================


struct  Sf_BFu1i_Vp  {
  struct empty v1;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 Sf_BFu1i_Vp) C1{ FC2{} Fi:1 Fp}



static void Test_Sf_BFu1i_Vp()
{
  {
    init_simple_test("Sf_BFu1i_Vp");
    static STRUCT_IF_C Sf_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu1i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1i_Vp, Sf_BFu1i_Vp)
//============================================================================


struct  Sf_BFu1ll  {
  struct empty v1;
  __tsu64 v2:1;
};
//SIG(1 Sf_BFu1ll) C1{ FC2{} FL:1}



static void Test_Sf_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1ll");
    static STRUCT_IF_C Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll, Sf_BFu1ll)
//============================================================================


struct  Sf_BFu1ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu1ll_BFu15i) C1{ FC2{} FL:1 Fi:15}



static void Test_Sf_BFu1ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu15i");
    static STRUCT_IF_C Sf_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu15i, Sf_BFu1ll_BFu15i)
//============================================================================


struct  Sf_BFu1ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu1ll_BFu15ll) C1{ FC2{} FL:1 FL:15}



static void Test_Sf_BFu1ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu15ll, Sf_BFu1ll_BFu15ll)
//============================================================================


struct  Sf_BFu1ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu1ll_BFu15s) C1{ FC2{} FL:1 Fs:15}



static void Test_Sf_BFu1ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu15s");
    static STRUCT_IF_C Sf_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu15s, Sf_BFu1ll_BFu15s)
//============================================================================


struct  Sf_BFu1ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu1ll_BFu16i) C1{ FC2{} FL:1 Fi:16}



static void Test_Sf_BFu1ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu16i");
    static STRUCT_IF_C Sf_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu16i, Sf_BFu1ll_BFu16i)
//============================================================================


struct  Sf_BFu1ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu1ll_BFu16ll) C1{ FC2{} FL:1 FL:16}



static void Test_Sf_BFu1ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu16ll, Sf_BFu1ll_BFu16ll)
//============================================================================


struct  Sf_BFu1ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu1ll_BFu16s) C1{ FC2{} FL:1 Fs:16}



static void Test_Sf_BFu1ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu16s");
    static STRUCT_IF_C Sf_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu16s, Sf_BFu1ll_BFu16s)
//============================================================================


struct  Sf_BFu1ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu1ll_BFu17i) C1{ FC2{} FL:1 Fi:17}



static void Test_Sf_BFu1ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu17i");
    static STRUCT_IF_C Sf_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu17i, Sf_BFu1ll_BFu17i)
//============================================================================


struct  Sf_BFu1ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu1ll_BFu17ll) C1{ FC2{} FL:1 FL:17}



static void Test_Sf_BFu1ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu17ll, Sf_BFu1ll_BFu17ll)
//============================================================================


struct  Sf_BFu1ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu1ll_BFu1c) C1{ FC2{} FL:1 Fc:1}



static void Test_Sf_BFu1ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu1ll_BFu1c");
    static STRUCT_IF_C Sf_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu1c, Sf_BFu1ll_BFu1c)
//============================================================================


struct  Sf_BFu1ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu1ll_BFu1i) C1{ FC2{} FL:1 Fi:1}



static void Test_Sf_BFu1ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu1i");
    static STRUCT_IF_C Sf_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu1i, Sf_BFu1ll_BFu1i)
//============================================================================


struct  Sf_BFu1ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu1ll_BFu1ll) C1{ FC2{} FL:1 FL:1}



static void Test_Sf_BFu1ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu1ll, Sf_BFu1ll_BFu1ll)
//============================================================================


struct  Sf_BFu1ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu1ll_BFu1s) C1{ FC2{} FL:1 Fs:1}



static void Test_Sf_BFu1ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu1s");
    static STRUCT_IF_C Sf_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu1s, Sf_BFu1ll_BFu1s)
//============================================================================


struct  Sf_BFu1ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu1ll_BFu31i) C1{ FC2{} FL:1 Fi:31}



static void Test_Sf_BFu1ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu31i");
    static STRUCT_IF_C Sf_BFu1ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu31i, Sf_BFu1ll_BFu31i)
//============================================================================


struct  Sf_BFu1ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu1ll_BFu31ll) C1{ FC2{} FL:1 FL:31}



static void Test_Sf_BFu1ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu31ll, Sf_BFu1ll_BFu31ll)
//============================================================================


struct  Sf_BFu1ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu1ll_BFu32i) C1{ FC2{} FL:1 Fi:32}



static void Test_Sf_BFu1ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu32i");
    static STRUCT_IF_C Sf_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu32i, Sf_BFu1ll_BFu32i)
//============================================================================


struct  Sf_BFu1ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu1ll_BFu32ll) C1{ FC2{} FL:1 FL:32}



static void Test_Sf_BFu1ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, 1, "Sf_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, hide_ull(1LL<<31), "Sf_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu32ll, Sf_BFu1ll_BFu32ll)
//============================================================================


struct  Sf_BFu1ll_BFu33  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu1ll_BFu33) C1{ FC2{} FL:1 FL:33}



static void Test_Sf_BFu1ll_BFu33()
{
  {
    init_simple_test("Sf_BFu1ll_BFu33");
    static STRUCT_IF_C Sf_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, 1, "Sf_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, hide_ull(1LL<<32), "Sf_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu33, Sf_BFu1ll_BFu33)
//============================================================================


struct  Sf_BFu1ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu1ll_BFu7c) C1{ FC2{} FL:1 Fc:7}



static void Test_Sf_BFu1ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu1ll_BFu7c");
    static STRUCT_IF_C Sf_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu7c, Sf_BFu1ll_BFu7c)
//============================================================================


struct  Sf_BFu1ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu1ll_BFu7i) C1{ FC2{} FL:1 Fi:7}



static void Test_Sf_BFu1ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu7i");
    static STRUCT_IF_C Sf_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu7i, Sf_BFu1ll_BFu7i)
//============================================================================


struct  Sf_BFu1ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu1ll_BFu7ll) C1{ FC2{} FL:1 FL:7}



static void Test_Sf_BFu1ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu7ll, Sf_BFu1ll_BFu7ll)
//============================================================================


struct  Sf_BFu1ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu1ll_BFu7s) C1{ FC2{} FL:1 Fs:7}



static void Test_Sf_BFu1ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu7s");
    static STRUCT_IF_C Sf_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu7s, Sf_BFu1ll_BFu7s)
//============================================================================


struct  Sf_BFu1ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu1ll_BFu8c) C1{ FC2{} FL:1 Fc:8}



static void Test_Sf_BFu1ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu1ll_BFu8c");
    static STRUCT_IF_C Sf_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu8c, Sf_BFu1ll_BFu8c)
//============================================================================


struct  Sf_BFu1ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu1ll_BFu8i) C1{ FC2{} FL:1 Fi:8}



static void Test_Sf_BFu1ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu8i");
    static STRUCT_IF_C Sf_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu8i, Sf_BFu1ll_BFu8i)
//============================================================================


struct  Sf_BFu1ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu1ll_BFu8ll) C1{ FC2{} FL:1 FL:8}



static void Test_Sf_BFu1ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu8ll, Sf_BFu1ll_BFu8ll)
//============================================================================


struct  Sf_BFu1ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu1ll_BFu8s) C1{ FC2{} FL:1 Fs:8}



static void Test_Sf_BFu1ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu8s");
    static STRUCT_IF_C Sf_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu8s, Sf_BFu1ll_BFu8s)
//============================================================================


struct  Sf_BFu1ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu1ll_BFu9i) C1{ FC2{} FL:1 Fi:9}



static void Test_Sf_BFu1ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu1ll_BFu9i");
    static STRUCT_IF_C Sf_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu9i, Sf_BFu1ll_BFu9i)
//============================================================================


struct  Sf_BFu1ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu1ll_BFu9ll) C1{ FC2{} FL:1 FL:9}



static void Test_Sf_BFu1ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu1ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu9ll, Sf_BFu1ll_BFu9ll)
//============================================================================


struct  Sf_BFu1ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu1ll_BFu9s) C1{ FC2{} FL:1 Fs:9}



static void Test_Sf_BFu1ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu1ll_BFu9s");
    static STRUCT_IF_C Sf_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_BFu9s, Sf_BFu1ll_BFu9s)
//============================================================================


struct  Sf_BFu1ll_C  {
  struct empty v1;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 Sf_BFu1ll_C) C1{ FC2{} FL:1 Fc}



static void Test_Sf_BFu1ll_C()
{
  {
    init_simple_test("Sf_BFu1ll_C");
    static STRUCT_IF_C Sf_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_C");
    check_field_offset(lv, v3, 1, "Sf_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_C, Sf_BFu1ll_C)
//============================================================================


struct  Sf_BFu1ll_D  {
  struct empty v1;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 Sf_BFu1ll_D) C1{ FC2{} FL:1 FL}



static void Test_Sf_BFu1ll_D()
{
  {
    init_simple_test("Sf_BFu1ll_D");
    static STRUCT_IF_C Sf_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_D, Sf_BFu1ll_D)
//============================================================================


struct  Sf_BFu1ll_F  {
  struct empty v1;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 Sf_BFu1ll_F) C1{ FC2{} FL:1 Fi}



static void Test_Sf_BFu1ll_F()
{
  {
    init_simple_test("Sf_BFu1ll_F");
    static STRUCT_IF_C Sf_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_F, Sf_BFu1ll_F)
//============================================================================


struct  Sf_BFu1ll_I  {
  struct empty v1;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 Sf_BFu1ll_I) C1{ FC2{} FL:1 Fi}



static void Test_Sf_BFu1ll_I()
{
  {
    init_simple_test("Sf_BFu1ll_I");
    static STRUCT_IF_C Sf_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_I, Sf_BFu1ll_I)
//============================================================================


struct  Sf_BFu1ll_Ip  {
  struct empty v1;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 Sf_BFu1ll_Ip) C1{ FC2{} FL:1 Fp}



static void Test_Sf_BFu1ll_Ip()
{
  {
    init_simple_test("Sf_BFu1ll_Ip");
    static STRUCT_IF_C Sf_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Ip, Sf_BFu1ll_Ip)
//============================================================================


struct  Sf_BFu1ll_L  {
  struct empty v1;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 Sf_BFu1ll_L) C1{ FC2{} FL:1 FL}



static void Test_Sf_BFu1ll_L()
{
  {
    init_simple_test("Sf_BFu1ll_L");
    static STRUCT_IF_C Sf_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_L, Sf_BFu1ll_L)
//============================================================================


struct  Sf_BFu1ll_S  {
  struct empty v1;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 Sf_BFu1ll_S) C1{ FC2{} FL:1 Fs}



static void Test_Sf_BFu1ll_S()
{
  {
    init_simple_test("Sf_BFu1ll_S");
    static STRUCT_IF_C Sf_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_S, Sf_BFu1ll_S)
//============================================================================


struct  Sf_BFu1ll_Sf  {
  struct empty v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Sf_BFu1ll_Sf) C1{ FC2{} FL:1 FC2}



static void Test_Sf_BFu1ll_Sf()
{
  {
    init_simple_test("Sf_BFu1ll_Sf");
    static STRUCT_IF_C Sf_BFu1ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Sf, Sf_BFu1ll_Sf)
//============================================================================


struct  Sf_BFu1ll_Uc  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 Sf_BFu1ll_Uc) C1{ FC2{} FL:1 Fc}



static void Test_Sf_BFu1ll_Uc()
{
  {
    init_simple_test("Sf_BFu1ll_Uc");
    static STRUCT_IF_C Sf_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Uc, Sf_BFu1ll_Uc)
//============================================================================


struct  Sf_BFu1ll_Ui  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 Sf_BFu1ll_Ui) C1{ FC2{} FL:1 Fi}



static void Test_Sf_BFu1ll_Ui()
{
  {
    init_simple_test("Sf_BFu1ll_Ui");
    static STRUCT_IF_C Sf_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Ui, Sf_BFu1ll_Ui)
//============================================================================


struct  Sf_BFu1ll_Ul  {
  struct empty v1;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 Sf_BFu1ll_Ul) C1{ FC2{} FL:1 FL}



static void Test_Sf_BFu1ll_Ul()
{
  {
    init_simple_test("Sf_BFu1ll_Ul");
    static STRUCT_IF_C Sf_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Ul, Sf_BFu1ll_Ul)
//============================================================================


struct  Sf_BFu1ll_Us  {
  struct empty v1;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 Sf_BFu1ll_Us) C1{ FC2{} FL:1 Fs}



static void Test_Sf_BFu1ll_Us()
{
  {
    init_simple_test("Sf_BFu1ll_Us");
    static STRUCT_IF_C Sf_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Us, Sf_BFu1ll_Us)
//============================================================================


struct  Sf_BFu1ll_Vp  {
  struct empty v1;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 Sf_BFu1ll_Vp) C1{ FC2{} FL:1 Fp}



static void Test_Sf_BFu1ll_Vp()
{
  {
    init_simple_test("Sf_BFu1ll_Vp");
    static STRUCT_IF_C Sf_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu1ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1ll_Vp, Sf_BFu1ll_Vp)
//============================================================================


struct  Sf_BFu1s  {
  struct empty v1;
  unsigned short v2:1;
};
//SIG(1 Sf_BFu1s) C1{ FC2{} Fs:1}



static void Test_Sf_BFu1s()
{
  {
    init_simple_test("Sf_BFu1s");
    static STRUCT_IF_C Sf_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s, Sf_BFu1s)
//============================================================================


struct  Sf_BFu1s_BFu15i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu1s_BFu15i) C1{ FC2{} Fs:1 Fi:15}



static void Test_Sf_BFu1s_BFu15i()
{
  {
    init_simple_test("Sf_BFu1s_BFu15i");
    static STRUCT_IF_C Sf_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu15i, Sf_BFu1s_BFu15i)
//============================================================================


struct  Sf_BFu1s_BFu15ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu1s_BFu15ll) C1{ FC2{} Fs:1 FL:15}



static void Test_Sf_BFu1s_BFu15ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu15ll");
    static STRUCT_IF_C Sf_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu15ll, Sf_BFu1s_BFu15ll)
//============================================================================


struct  Sf_BFu1s_BFu15s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu1s_BFu15s) C1{ FC2{} Fs:1 Fs:15}



static void Test_Sf_BFu1s_BFu15s()
{
  {
    init_simple_test("Sf_BFu1s_BFu15s");
    static STRUCT_IF_C Sf_BFu1s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, 1, "Sf_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 0, 1, 15, hide_ull(1LL<<14), "Sf_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu15s, Sf_BFu1s_BFu15s)
//============================================================================


struct  Sf_BFu1s_BFu16i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu1s_BFu16i) C1{ FC2{} Fs:1 Fi:16}



static void Test_Sf_BFu1s_BFu16i()
{
  {
    init_simple_test("Sf_BFu1s_BFu16i");
    static STRUCT_IF_C Sf_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu16i, Sf_BFu1s_BFu16i)
//============================================================================


struct  Sf_BFu1s_BFu16ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu1s_BFu16ll) C1{ FC2{} Fs:1 FL:16}



static void Test_Sf_BFu1s_BFu16ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu16ll");
    static STRUCT_IF_C Sf_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, 1, "Sf_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 0, 1, 16, hide_ull(1LL<<15), "Sf_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu16ll, Sf_BFu1s_BFu16ll)
//============================================================================


struct  Sf_BFu1s_BFu16s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu1s_BFu16s) C1{ FC2{} Fs:1 Fs:16}



static void Test_Sf_BFu1s_BFu16s()
{
  {
    init_simple_test("Sf_BFu1s_BFu16s");
    static STRUCT_IF_C Sf_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu16s, Sf_BFu1s_BFu16s)
//============================================================================


struct  Sf_BFu1s_BFu17i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu1s_BFu17i) C1{ FC2{} Fs:1 Fi:17}



static void Test_Sf_BFu1s_BFu17i()
{
  {
    init_simple_test("Sf_BFu1s_BFu17i");
    static STRUCT_IF_C Sf_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu17i, Sf_BFu1s_BFu17i)
//============================================================================


struct  Sf_BFu1s_BFu17ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu1s_BFu17ll) C1{ FC2{} Fs:1 FL:17}



static void Test_Sf_BFu1s_BFu17ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu17ll");
    static STRUCT_IF_C Sf_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, 1, "Sf_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 0, 1, 17, hide_ull(1LL<<16), "Sf_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu17ll, Sf_BFu1s_BFu17ll)
//============================================================================


struct  Sf_BFu1s_BFu1c  {
  struct empty v1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu1s_BFu1c) C1{ FC2{} Fs:1 Fc:1}



static void Test_Sf_BFu1s_BFu1c()
{
  {
    init_simple_test("Sf_BFu1s_BFu1c");
    static STRUCT_IF_C Sf_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu1c, Sf_BFu1s_BFu1c)
//============================================================================


struct  Sf_BFu1s_BFu1i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu1s_BFu1i) C1{ FC2{} Fs:1 Fi:1}



static void Test_Sf_BFu1s_BFu1i()
{
  {
    init_simple_test("Sf_BFu1s_BFu1i");
    static STRUCT_IF_C Sf_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu1i, Sf_BFu1s_BFu1i)
//============================================================================


struct  Sf_BFu1s_BFu1ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu1s_BFu1ll) C1{ FC2{} Fs:1 FL:1}



static void Test_Sf_BFu1s_BFu1ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu1ll");
    static STRUCT_IF_C Sf_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu1ll, Sf_BFu1s_BFu1ll)
//============================================================================


struct  Sf_BFu1s_BFu1s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu1s_BFu1s) C1{ FC2{} Fs:1 Fs:1}



static void Test_Sf_BFu1s_BFu1s()
{
  {
    init_simple_test("Sf_BFu1s_BFu1s");
    static STRUCT_IF_C Sf_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 1, 1, 1, "Sf_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu1s, Sf_BFu1s_BFu1s)
//============================================================================


struct  Sf_BFu1s_BFu31i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu1s_BFu31i) C1{ FC2{} Fs:1 Fi:31}



static void Test_Sf_BFu1s_BFu31i()
{
  {
    init_simple_test("Sf_BFu1s_BFu31i");
    static STRUCT_IF_C Sf_BFu1s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu31i, Sf_BFu1s_BFu31i)
//============================================================================


struct  Sf_BFu1s_BFu31ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu1s_BFu31ll) C1{ FC2{} Fs:1 FL:31}



static void Test_Sf_BFu1s_BFu31ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu31ll");
    static STRUCT_IF_C Sf_BFu1s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, 1, "Sf_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 0, 1, 31, hide_ull(1LL<<30), "Sf_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu31ll, Sf_BFu1s_BFu31ll)
//============================================================================


struct  Sf_BFu1s_BFu32i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu1s_BFu32i) C1{ FC2{} Fs:1 Fi:32}



static void Test_Sf_BFu1s_BFu32i()
{
  {
    init_simple_test("Sf_BFu1s_BFu32i");
    static STRUCT_IF_C Sf_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu32i, Sf_BFu1s_BFu32i)
//============================================================================


struct  Sf_BFu1s_BFu32ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu1s_BFu32ll) C1{ FC2{} Fs:1 FL:32}



static void Test_Sf_BFu1s_BFu32ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu32ll");
    static STRUCT_IF_C Sf_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, 1, "Sf_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 0, 1, 32, hide_ull(1LL<<31), "Sf_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu32ll, Sf_BFu1s_BFu32ll)
//============================================================================


struct  Sf_BFu1s_BFu33  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu1s_BFu33) C1{ FC2{} Fs:1 FL:33}



static void Test_Sf_BFu1s_BFu33()
{
  {
    init_simple_test("Sf_BFu1s_BFu33");
    static STRUCT_IF_C Sf_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, 1, "Sf_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 0, 1, 33, hide_ull(1LL<<32), "Sf_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu33, Sf_BFu1s_BFu33)
//============================================================================


struct  Sf_BFu1s_BFu7c  {
  struct empty v1;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu1s_BFu7c) C1{ FC2{} Fs:1 Fc:7}



static void Test_Sf_BFu1s_BFu7c()
{
  {
    init_simple_test("Sf_BFu1s_BFu7c");
    static STRUCT_IF_C Sf_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu7c, Sf_BFu1s_BFu7c)
//============================================================================


struct  Sf_BFu1s_BFu7i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu1s_BFu7i) C1{ FC2{} Fs:1 Fi:7}



static void Test_Sf_BFu1s_BFu7i()
{
  {
    init_simple_test("Sf_BFu1s_BFu7i");
    static STRUCT_IF_C Sf_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu7i, Sf_BFu1s_BFu7i)
//============================================================================


struct  Sf_BFu1s_BFu7ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu1s_BFu7ll) C1{ FC2{} Fs:1 FL:7}



static void Test_Sf_BFu1s_BFu7ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu7ll");
    static STRUCT_IF_C Sf_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu7ll, Sf_BFu1s_BFu7ll)
//============================================================================


struct  Sf_BFu1s_BFu7s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu1s_BFu7s) C1{ FC2{} Fs:1 Fs:7}



static void Test_Sf_BFu1s_BFu7s()
{
  {
    init_simple_test("Sf_BFu1s_BFu7s");
    static STRUCT_IF_C Sf_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, 1, "Sf_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 0, 1, 7, hide_ull(1LL<<6), "Sf_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu7s, Sf_BFu1s_BFu7s)
//============================================================================


struct  Sf_BFu1s_BFu8c  {
  struct empty v1;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu1s_BFu8c) C1{ FC2{} Fs:1 Fc:8}



static void Test_Sf_BFu1s_BFu8c()
{
  {
    init_simple_test("Sf_BFu1s_BFu8c");
    static STRUCT_IF_C Sf_BFu1s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu8c, Sf_BFu1s_BFu8c)
//============================================================================


struct  Sf_BFu1s_BFu8i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu1s_BFu8i) C1{ FC2{} Fs:1 Fi:8}



static void Test_Sf_BFu1s_BFu8i()
{
  {
    init_simple_test("Sf_BFu1s_BFu8i");
    static STRUCT_IF_C Sf_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu8i, Sf_BFu1s_BFu8i)
//============================================================================


struct  Sf_BFu1s_BFu8ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu1s_BFu8ll) C1{ FC2{} Fs:1 FL:8}



static void Test_Sf_BFu1s_BFu8ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu8ll");
    static STRUCT_IF_C Sf_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu8ll, Sf_BFu1s_BFu8ll)
//============================================================================


struct  Sf_BFu1s_BFu8s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu1s_BFu8s) C1{ FC2{} Fs:1 Fs:8}



static void Test_Sf_BFu1s_BFu8s()
{
  {
    init_simple_test("Sf_BFu1s_BFu8s");
    static STRUCT_IF_C Sf_BFu1s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, 1, "Sf_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 0, 1, 8, hide_ull(1LL<<7), "Sf_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu8s, Sf_BFu1s_BFu8s)
//============================================================================


struct  Sf_BFu1s_BFu9i  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu1s_BFu9i) C1{ FC2{} Fs:1 Fi:9}



static void Test_Sf_BFu1s_BFu9i()
{
  {
    init_simple_test("Sf_BFu1s_BFu9i");
    static STRUCT_IF_C Sf_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu9i, Sf_BFu1s_BFu9i)
//============================================================================


struct  Sf_BFu1s_BFu9ll  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu1s_BFu9ll) C1{ FC2{} Fs:1 FL:9}



static void Test_Sf_BFu1s_BFu9ll()
{
  {
    init_simple_test("Sf_BFu1s_BFu9ll");
    static STRUCT_IF_C Sf_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu9ll, Sf_BFu1s_BFu9ll)
//============================================================================


struct  Sf_BFu1s_BFu9s  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu1s_BFu9s) C1{ FC2{} Fs:1 Fs:9}



static void Test_Sf_BFu1s_BFu9s()
{
  {
    init_simple_test("Sf_BFu1s_BFu9s");
    static STRUCT_IF_C Sf_BFu1s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, 1, "Sf_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 0, 1, 9, hide_ull(1LL<<8), "Sf_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_BFu9s, Sf_BFu1s_BFu9s)
//============================================================================


struct  Sf_BFu1s_C  {
  struct empty v1;
  unsigned short v2:1;
  char v3;
};
//SIG(1 Sf_BFu1s_C) C1{ FC2{} Fs:1 Fc}



static void Test_Sf_BFu1s_C()
{
  {
    init_simple_test("Sf_BFu1s_C");
    static STRUCT_IF_C Sf_BFu1s_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_C");
    check_field_offset(lv, v3, 1, "Sf_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_C, Sf_BFu1s_C)
//============================================================================


struct  Sf_BFu1s_D  {
  struct empty v1;
  unsigned short v2:1;
  double v3;
};
//SIG(1 Sf_BFu1s_D) C1{ FC2{} Fs:1 FL}



static void Test_Sf_BFu1s_D()
{
  {
    init_simple_test("Sf_BFu1s_D");
    static STRUCT_IF_C Sf_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_D, Sf_BFu1s_D)
//============================================================================


struct  Sf_BFu1s_F  {
  struct empty v1;
  unsigned short v2:1;
  float v3;
};
//SIG(1 Sf_BFu1s_F) C1{ FC2{} Fs:1 Fi}



static void Test_Sf_BFu1s_F()
{
  {
    init_simple_test("Sf_BFu1s_F");
    static STRUCT_IF_C Sf_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_F, Sf_BFu1s_F)
//============================================================================


struct  Sf_BFu1s_I  {
  struct empty v1;
  unsigned short v2:1;
  int v3;
};
//SIG(1 Sf_BFu1s_I) C1{ FC2{} Fs:1 Fi}



static void Test_Sf_BFu1s_I()
{
  {
    init_simple_test("Sf_BFu1s_I");
    static STRUCT_IF_C Sf_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_I, Sf_BFu1s_I)
//============================================================================


struct  Sf_BFu1s_Ip  {
  struct empty v1;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 Sf_BFu1s_Ip) C1{ FC2{} Fs:1 Fp}



static void Test_Sf_BFu1s_Ip()
{
  {
    init_simple_test("Sf_BFu1s_Ip");
    static STRUCT_IF_C Sf_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Ip, Sf_BFu1s_Ip)
//============================================================================


struct  Sf_BFu1s_L  {
  struct empty v1;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 Sf_BFu1s_L) C1{ FC2{} Fs:1 FL}



static void Test_Sf_BFu1s_L()
{
  {
    init_simple_test("Sf_BFu1s_L");
    static STRUCT_IF_C Sf_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_L, Sf_BFu1s_L)
//============================================================================


struct  Sf_BFu1s_S  {
  struct empty v1;
  unsigned short v2:1;
  short v3;
};
//SIG(1 Sf_BFu1s_S) C1{ FC2{} Fs:1 Fs}



static void Test_Sf_BFu1s_S()
{
  {
    init_simple_test("Sf_BFu1s_S");
    static STRUCT_IF_C Sf_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_S, Sf_BFu1s_S)
//============================================================================


struct  Sf_BFu1s_Sf  {
  struct empty v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Sf_BFu1s_Sf) C1{ FC2{} Fs:1 FC2}



static void Test_Sf_BFu1s_Sf()
{
  {
    init_simple_test("Sf_BFu1s_Sf");
    static STRUCT_IF_C Sf_BFu1s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Sf, Sf_BFu1s_Sf)
//============================================================================


struct  Sf_BFu1s_Uc  {
  struct empty v1;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 Sf_BFu1s_Uc) C1{ FC2{} Fs:1 Fc}



static void Test_Sf_BFu1s_Uc()
{
  {
    init_simple_test("Sf_BFu1s_Uc");
    static STRUCT_IF_C Sf_BFu1s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Uc, Sf_BFu1s_Uc)
//============================================================================


struct  Sf_BFu1s_Ui  {
  struct empty v1;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 Sf_BFu1s_Ui) C1{ FC2{} Fs:1 Fi}



static void Test_Sf_BFu1s_Ui()
{
  {
    init_simple_test("Sf_BFu1s_Ui");
    static STRUCT_IF_C Sf_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu1s_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Ui, Sf_BFu1s_Ui)
//============================================================================


struct  Sf_BFu1s_Ul  {
  struct empty v1;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 Sf_BFu1s_Ul) C1{ FC2{} Fs:1 FL}



static void Test_Sf_BFu1s_Ul()
{
  {
    init_simple_test("Sf_BFu1s_Ul");
    static STRUCT_IF_C Sf_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Ul, Sf_BFu1s_Ul)
//============================================================================


struct  Sf_BFu1s_Us  {
  struct empty v1;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 Sf_BFu1s_Us) C1{ FC2{} Fs:1 Fs}



static void Test_Sf_BFu1s_Us()
{
  {
    init_simple_test("Sf_BFu1s_Us");
    static STRUCT_IF_C Sf_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu1s_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Us, Sf_BFu1s_Us)
//============================================================================


struct  Sf_BFu1s_Vp  {
  struct empty v1;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 Sf_BFu1s_Vp) C1{ FC2{} Fs:1 Fp}



static void Test_Sf_BFu1s_Vp()
{
  {
    init_simple_test("Sf_BFu1s_Vp");
    static STRUCT_IF_C Sf_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu1s_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu1s_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 1, 1, "Sf_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu1s_Vp, Sf_BFu1s_Vp)
//============================================================================


struct  Sf_BFu31i  {
  struct empty v1;
  unsigned int v2:31;
};
//SIG(1 Sf_BFu31i) C1{ FC2{} Fi:31}



static void Test_Sf_BFu31i()
{
  {
    init_simple_test("Sf_BFu31i");
    static STRUCT_IF_C Sf_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i, Sf_BFu31i)
//============================================================================


struct  Sf_BFu31i_BFu15i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu31i_BFu15i) C1{ FC2{} Fi:31 Fi:15}



static void Test_Sf_BFu31i_BFu15i()
{
  {
    init_simple_test("Sf_BFu31i_BFu15i");
    static STRUCT_IF_C Sf_BFu31i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu15i, Sf_BFu31i_BFu15i)
//============================================================================


struct  Sf_BFu31i_BFu15ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu31i_BFu15ll) C1{ FC2{} Fi:31 FL:15}



static void Test_Sf_BFu31i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu15ll");
    static STRUCT_IF_C Sf_BFu31i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "Sf_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu15ll, Sf_BFu31i_BFu15ll)
//============================================================================


struct  Sf_BFu31i_BFu15s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu31i_BFu15s) C1{ FC2{} Fi:31 Fs:15}



static void Test_Sf_BFu31i_BFu15s()
{
  {
    init_simple_test("Sf_BFu31i_BFu15s");
    static STRUCT_IF_C Sf_BFu31i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu15s, Sf_BFu31i_BFu15s)
//============================================================================


struct  Sf_BFu31i_BFu16i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu31i_BFu16i) C1{ FC2{} Fi:31 Fi:16}



static void Test_Sf_BFu31i_BFu16i()
{
  {
    init_simple_test("Sf_BFu31i_BFu16i");
    static STRUCT_IF_C Sf_BFu31i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu16i, Sf_BFu31i_BFu16i)
//============================================================================


struct  Sf_BFu31i_BFu16ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu31i_BFu16ll) C1{ FC2{} Fi:31 FL:16}



static void Test_Sf_BFu31i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu16ll");
    static STRUCT_IF_C Sf_BFu31i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "Sf_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu16ll, Sf_BFu31i_BFu16ll)
//============================================================================


struct  Sf_BFu31i_BFu16s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu31i_BFu16s) C1{ FC2{} Fi:31 Fs:16}



static void Test_Sf_BFu31i_BFu16s()
{
  {
    init_simple_test("Sf_BFu31i_BFu16s");
    static STRUCT_IF_C Sf_BFu31i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu16s, Sf_BFu31i_BFu16s)
//============================================================================


struct  Sf_BFu31i_BFu17i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu31i_BFu17i) C1{ FC2{} Fi:31 Fi:17}



static void Test_Sf_BFu31i_BFu17i()
{
  {
    init_simple_test("Sf_BFu31i_BFu17i");
    static STRUCT_IF_C Sf_BFu31i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu17i, Sf_BFu31i_BFu17i)
//============================================================================


struct  Sf_BFu31i_BFu17ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu31i_BFu17ll) C1{ FC2{} Fi:31 FL:17}



static void Test_Sf_BFu31i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu17ll");
    static STRUCT_IF_C Sf_BFu31i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "Sf_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "Sf_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu17ll, Sf_BFu31i_BFu17ll)
//============================================================================


struct  Sf_BFu31i_BFu1c  {
  struct empty v1;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu31i_BFu1c) C1{ FC2{} Fi:31 Fc:1}



static void Test_Sf_BFu31i_BFu1c()
{
  {
    init_simple_test("Sf_BFu31i_BFu1c");
    static STRUCT_IF_C Sf_BFu31i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu1c, Sf_BFu31i_BFu1c)
//============================================================================


struct  Sf_BFu31i_BFu1i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu31i_BFu1i) C1{ FC2{} Fi:31 Fi:1}



static void Test_Sf_BFu31i_BFu1i()
{
  {
    init_simple_test("Sf_BFu31i_BFu1i");
    static STRUCT_IF_C Sf_BFu31i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu1i, Sf_BFu31i_BFu1i)
//============================================================================


struct  Sf_BFu31i_BFu1ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu31i_BFu1ll) C1{ FC2{} Fi:31 FL:1}



static void Test_Sf_BFu31i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu1ll");
    static STRUCT_IF_C Sf_BFu31i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu1ll, Sf_BFu31i_BFu1ll)
//============================================================================


struct  Sf_BFu31i_BFu1s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu31i_BFu1s) C1{ FC2{} Fi:31 Fs:1}



static void Test_Sf_BFu31i_BFu1s()
{
  {
    init_simple_test("Sf_BFu31i_BFu1s");
    static STRUCT_IF_C Sf_BFu31i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu1s, Sf_BFu31i_BFu1s)
//============================================================================


struct  Sf_BFu31i_BFu31i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu31i_BFu31i) C1{ FC2{} Fi:31 Fi:31}



static void Test_Sf_BFu31i_BFu31i()
{
  {
    init_simple_test("Sf_BFu31i_BFu31i");
    static STRUCT_IF_C Sf_BFu31i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu31i, Sf_BFu31i_BFu31i)
//============================================================================


struct  Sf_BFu31i_BFu31ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu31i_BFu31ll) C1{ FC2{} Fi:31 FL:31}



static void Test_Sf_BFu31i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu31ll");
    static STRUCT_IF_C Sf_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "Sf_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu31ll, Sf_BFu31i_BFu31ll)
//============================================================================


struct  Sf_BFu31i_BFu32i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu31i_BFu32i) C1{ FC2{} Fi:31 Fi:32}



static void Test_Sf_BFu31i_BFu32i()
{
  {
    init_simple_test("Sf_BFu31i_BFu32i");
    static STRUCT_IF_C Sf_BFu31i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu32i, Sf_BFu31i_BFu32i)
//============================================================================


struct  Sf_BFu31i_BFu32ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu31i_BFu32ll) C1{ FC2{} Fi:31 FL:32}



static void Test_Sf_BFu31i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu32ll");
    static STRUCT_IF_C Sf_BFu31i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "Sf_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "Sf_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu32ll, Sf_BFu31i_BFu32ll)
//============================================================================


struct  Sf_BFu31i_BFu33  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu31i_BFu33) C1{ FC2{} Fi:31 FL:33}



static void Test_Sf_BFu31i_BFu33()
{
  {
    init_simple_test("Sf_BFu31i_BFu33");
    static STRUCT_IF_C Sf_BFu31i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "Sf_BFu31i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "Sf_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu33, Sf_BFu31i_BFu33)
//============================================================================


struct  Sf_BFu31i_BFu7c  {
  struct empty v1;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu31i_BFu7c) C1{ FC2{} Fi:31 Fc:7}



static void Test_Sf_BFu31i_BFu7c()
{
  {
    init_simple_test("Sf_BFu31i_BFu7c");
    static STRUCT_IF_C Sf_BFu31i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu7c, Sf_BFu31i_BFu7c)
//============================================================================


struct  Sf_BFu31i_BFu7i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu31i_BFu7i) C1{ FC2{} Fi:31 Fi:7}



static void Test_Sf_BFu31i_BFu7i()
{
  {
    init_simple_test("Sf_BFu31i_BFu7i");
    static STRUCT_IF_C Sf_BFu31i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu7i, Sf_BFu31i_BFu7i)
//============================================================================


struct  Sf_BFu31i_BFu7ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu31i_BFu7ll) C1{ FC2{} Fi:31 FL:7}



static void Test_Sf_BFu31i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu7ll");
    static STRUCT_IF_C Sf_BFu31i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "Sf_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu7ll, Sf_BFu31i_BFu7ll)
//============================================================================


struct  Sf_BFu31i_BFu7s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu31i_BFu7s) C1{ FC2{} Fi:31 Fs:7}



static void Test_Sf_BFu31i_BFu7s()
{
  {
    init_simple_test("Sf_BFu31i_BFu7s");
    static STRUCT_IF_C Sf_BFu31i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu7s, Sf_BFu31i_BFu7s)
//============================================================================


struct  Sf_BFu31i_BFu8c  {
  struct empty v1;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu31i_BFu8c) C1{ FC2{} Fi:31 Fc:8}



static void Test_Sf_BFu31i_BFu8c()
{
  {
    init_simple_test("Sf_BFu31i_BFu8c");
    static STRUCT_IF_C Sf_BFu31i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu8c, Sf_BFu31i_BFu8c)
//============================================================================


struct  Sf_BFu31i_BFu8i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu31i_BFu8i) C1{ FC2{} Fi:31 Fi:8}



static void Test_Sf_BFu31i_BFu8i()
{
  {
    init_simple_test("Sf_BFu31i_BFu8i");
    static STRUCT_IF_C Sf_BFu31i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu8i, Sf_BFu31i_BFu8i)
//============================================================================


struct  Sf_BFu31i_BFu8ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu31i_BFu8ll) C1{ FC2{} Fi:31 FL:8}



static void Test_Sf_BFu31i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu8ll");
    static STRUCT_IF_C Sf_BFu31i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "Sf_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu8ll, Sf_BFu31i_BFu8ll)
//============================================================================


struct  Sf_BFu31i_BFu8s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu31i_BFu8s) C1{ FC2{} Fi:31 Fs:8}



static void Test_Sf_BFu31i_BFu8s()
{
  {
    init_simple_test("Sf_BFu31i_BFu8s");
    static STRUCT_IF_C Sf_BFu31i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu8s, Sf_BFu31i_BFu8s)
//============================================================================


struct  Sf_BFu31i_BFu9i  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu31i_BFu9i) C1{ FC2{} Fi:31 Fi:9}



static void Test_Sf_BFu31i_BFu9i()
{
  {
    init_simple_test("Sf_BFu31i_BFu9i");
    static STRUCT_IF_C Sf_BFu31i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu9i, Sf_BFu31i_BFu9i)
//============================================================================


struct  Sf_BFu31i_BFu9ll  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu31i_BFu9ll) C1{ FC2{} Fi:31 FL:9}



static void Test_Sf_BFu31i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu31i_BFu9ll");
    static STRUCT_IF_C Sf_BFu31i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "Sf_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu9ll, Sf_BFu31i_BFu9ll)
//============================================================================


struct  Sf_BFu31i_BFu9s  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu31i_BFu9s) C1{ FC2{} Fi:31 Fs:9}



static void Test_Sf_BFu31i_BFu9s()
{
  {
    init_simple_test("Sf_BFu31i_BFu9s");
    static STRUCT_IF_C Sf_BFu31i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_BFu9s, Sf_BFu31i_BFu9s)
//============================================================================


struct  Sf_BFu31i_C  {
  struct empty v1;
  unsigned int v2:31;
  char v3;
};
//SIG(1 Sf_BFu31i_C) C1{ FC2{} Fi:31 Fc}



static void Test_Sf_BFu31i_C()
{
  {
    init_simple_test("Sf_BFu31i_C");
    static STRUCT_IF_C Sf_BFu31i_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_C");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_C");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_C, Sf_BFu31i_C)
//============================================================================


struct  Sf_BFu31i_D  {
  struct empty v1;
  unsigned int v2:31;
  double v3;
};
//SIG(1 Sf_BFu31i_D) C1{ FC2{} Fi:31 FL}



static void Test_Sf_BFu31i_D()
{
  {
    init_simple_test("Sf_BFu31i_D");
    static STRUCT_IF_C Sf_BFu31i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_D");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_D, Sf_BFu31i_D)
//============================================================================


struct  Sf_BFu31i_F  {
  struct empty v1;
  unsigned int v2:31;
  float v3;
};
//SIG(1 Sf_BFu31i_F) C1{ FC2{} Fi:31 Fi}



static void Test_Sf_BFu31i_F()
{
  {
    init_simple_test("Sf_BFu31i_F");
    static STRUCT_IF_C Sf_BFu31i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_F");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_F, Sf_BFu31i_F)
//============================================================================


struct  Sf_BFu31i_I  {
  struct empty v1;
  unsigned int v2:31;
  int v3;
};
//SIG(1 Sf_BFu31i_I) C1{ FC2{} Fi:31 Fi}



static void Test_Sf_BFu31i_I()
{
  {
    init_simple_test("Sf_BFu31i_I");
    static STRUCT_IF_C Sf_BFu31i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_I");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_I, Sf_BFu31i_I)
//============================================================================


struct  Sf_BFu31i_Ip  {
  struct empty v1;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 Sf_BFu31i_Ip) C1{ FC2{} Fi:31 Fp}



static void Test_Sf_BFu31i_Ip()
{
  {
    init_simple_test("Sf_BFu31i_Ip");
    static STRUCT_IF_C Sf_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Ip, Sf_BFu31i_Ip)
//============================================================================


struct  Sf_BFu31i_L  {
  struct empty v1;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 Sf_BFu31i_L) C1{ FC2{} Fi:31 FL}



static void Test_Sf_BFu31i_L()
{
  {
    init_simple_test("Sf_BFu31i_L");
    static STRUCT_IF_C Sf_BFu31i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_L");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_L, Sf_BFu31i_L)
//============================================================================


struct  Sf_BFu31i_S  {
  struct empty v1;
  unsigned int v2:31;
  short v3;
};
//SIG(1 Sf_BFu31i_S) C1{ FC2{} Fi:31 Fs}



static void Test_Sf_BFu31i_S()
{
  {
    init_simple_test("Sf_BFu31i_S");
    static STRUCT_IF_C Sf_BFu31i_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_S");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_S, Sf_BFu31i_S)
//============================================================================


struct  Sf_BFu31i_Sf  {
  struct empty v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Sf_BFu31i_Sf) C1{ FC2{} Fi:31 FC2}



static void Test_Sf_BFu31i_Sf()
{
  {
    init_simple_test("Sf_BFu31i_Sf");
    static STRUCT_IF_C Sf_BFu31i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu31i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Sf, Sf_BFu31i_Sf)
//============================================================================


struct  Sf_BFu31i_Uc  {
  struct empty v1;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 Sf_BFu31i_Uc) C1{ FC2{} Fi:31 Fc}



static void Test_Sf_BFu31i_Uc()
{
  {
    init_simple_test("Sf_BFu31i_Uc");
    static STRUCT_IF_C Sf_BFu31i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Uc, Sf_BFu31i_Uc)
//============================================================================


struct  Sf_BFu31i_Ui  {
  struct empty v1;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 Sf_BFu31i_Ui) C1{ FC2{} Fi:31 Fi}



static void Test_Sf_BFu31i_Ui()
{
  {
    init_simple_test("Sf_BFu31i_Ui");
    static STRUCT_IF_C Sf_BFu31i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Ui, Sf_BFu31i_Ui)
//============================================================================


struct  Sf_BFu31i_Ul  {
  struct empty v1;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 Sf_BFu31i_Ul) C1{ FC2{} Fi:31 FL}



static void Test_Sf_BFu31i_Ul()
{
  {
    init_simple_test("Sf_BFu31i_Ul");
    static STRUCT_IF_C Sf_BFu31i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Ul, Sf_BFu31i_Ul)
//============================================================================


struct  Sf_BFu31i_Us  {
  struct empty v1;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 Sf_BFu31i_Us) C1{ FC2{} Fi:31 Fs}



static void Test_Sf_BFu31i_Us()
{
  {
    init_simple_test("Sf_BFu31i_Us");
    static STRUCT_IF_C Sf_BFu31i_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu31i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Us");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Us, Sf_BFu31i_Us)
//============================================================================


struct  Sf_BFu31i_Vp  {
  struct empty v1;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 Sf_BFu31i_Vp) C1{ FC2{} Fi:31 Fp}



static void Test_Sf_BFu31i_Vp()
{
  {
    init_simple_test("Sf_BFu31i_Vp");
    static STRUCT_IF_C Sf_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu31i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31i_Vp, Sf_BFu31i_Vp)
//============================================================================


struct  Sf_BFu31ll  {
  struct empty v1;
  __tsu64 v2:31;
};
//SIG(1 Sf_BFu31ll) C1{ FC2{} FL:31}



static void Test_Sf_BFu31ll()
{
  {
    init_simple_test("Sf_BFu31ll");
    static STRUCT_IF_C Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll, Sf_BFu31ll)
//============================================================================


struct  Sf_BFu31ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu31ll_BFu15i) C1{ FC2{} FL:31 Fi:15}



static void Test_Sf_BFu31ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu15i");
    static STRUCT_IF_C Sf_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu15i, Sf_BFu31ll_BFu15i)
//============================================================================


struct  Sf_BFu31ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu31ll_BFu15ll) C1{ FC2{} FL:31 FL:15}



static void Test_Sf_BFu31ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "Sf_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu15ll, Sf_BFu31ll_BFu15ll)
//============================================================================


struct  Sf_BFu31ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu31ll_BFu15s) C1{ FC2{} FL:31 Fs:15}



static void Test_Sf_BFu31ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu15s");
    static STRUCT_IF_C Sf_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu15s, Sf_BFu31ll_BFu15s)
//============================================================================


struct  Sf_BFu31ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu31ll_BFu16i) C1{ FC2{} FL:31 Fi:16}



static void Test_Sf_BFu31ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu16i");
    static STRUCT_IF_C Sf_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu16i, Sf_BFu31ll_BFu16i)
//============================================================================


struct  Sf_BFu31ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu31ll_BFu16ll) C1{ FC2{} FL:31 FL:16}



static void Test_Sf_BFu31ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "Sf_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu16ll, Sf_BFu31ll_BFu16ll)
//============================================================================


struct  Sf_BFu31ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu31ll_BFu16s) C1{ FC2{} FL:31 Fs:16}



static void Test_Sf_BFu31ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu16s");
    static STRUCT_IF_C Sf_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu16s, Sf_BFu31ll_BFu16s)
//============================================================================


struct  Sf_BFu31ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu31ll_BFu17i) C1{ FC2{} FL:31 Fi:17}



static void Test_Sf_BFu31ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu17i");
    static STRUCT_IF_C Sf_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu17i, Sf_BFu31ll_BFu17i)
//============================================================================


struct  Sf_BFu31ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu31ll_BFu17ll) C1{ FC2{} FL:31 FL:17}



static void Test_Sf_BFu31ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "Sf_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "Sf_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu17ll, Sf_BFu31ll_BFu17ll)
//============================================================================


struct  Sf_BFu31ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu31ll_BFu1c) C1{ FC2{} FL:31 Fc:1}



static void Test_Sf_BFu31ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu31ll_BFu1c");
    static STRUCT_IF_C Sf_BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu1c, Sf_BFu31ll_BFu1c)
//============================================================================


struct  Sf_BFu31ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu31ll_BFu1i) C1{ FC2{} FL:31 Fi:1}



static void Test_Sf_BFu31ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu1i");
    static STRUCT_IF_C Sf_BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu1i, Sf_BFu31ll_BFu1i)
//============================================================================


struct  Sf_BFu31ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu31ll_BFu1ll) C1{ FC2{} FL:31 FL:1}



static void Test_Sf_BFu31ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu1ll, Sf_BFu31ll_BFu1ll)
//============================================================================


struct  Sf_BFu31ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu31ll_BFu1s) C1{ FC2{} FL:31 Fs:1}



static void Test_Sf_BFu31ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu1s");
    static STRUCT_IF_C Sf_BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "Sf_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu1s, Sf_BFu31ll_BFu1s)
//============================================================================


struct  Sf_BFu31ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu31ll_BFu31i) C1{ FC2{} FL:31 Fi:31}



static void Test_Sf_BFu31ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu31i");
    static STRUCT_IF_C Sf_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu31i, Sf_BFu31ll_BFu31i)
//============================================================================


struct  Sf_BFu31ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu31ll_BFu31ll) C1{ FC2{} FL:31 FL:31}



static void Test_Sf_BFu31ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "Sf_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu31ll, Sf_BFu31ll_BFu31ll)
//============================================================================


struct  Sf_BFu31ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu31ll_BFu32i) C1{ FC2{} FL:31 Fi:32}



static void Test_Sf_BFu31ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu32i");
    static STRUCT_IF_C Sf_BFu31ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu32i, Sf_BFu31ll_BFu32i)
//============================================================================


struct  Sf_BFu31ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu31ll_BFu32ll) C1{ FC2{} FL:31 FL:32}



static void Test_Sf_BFu31ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "Sf_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "Sf_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu32ll, Sf_BFu31ll_BFu32ll)
//============================================================================


struct  Sf_BFu31ll_BFu33  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu31ll_BFu33) C1{ FC2{} FL:31 FL:33}



static void Test_Sf_BFu31ll_BFu33()
{
  {
    init_simple_test("Sf_BFu31ll_BFu33");
    static STRUCT_IF_C Sf_BFu31ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "Sf_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "Sf_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu33, Sf_BFu31ll_BFu33)
//============================================================================


struct  Sf_BFu31ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu31ll_BFu7c) C1{ FC2{} FL:31 Fc:7}



static void Test_Sf_BFu31ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu31ll_BFu7c");
    static STRUCT_IF_C Sf_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu7c, Sf_BFu31ll_BFu7c)
//============================================================================


struct  Sf_BFu31ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu31ll_BFu7i) C1{ FC2{} FL:31 Fi:7}



static void Test_Sf_BFu31ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu7i");
    static STRUCT_IF_C Sf_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu7i, Sf_BFu31ll_BFu7i)
//============================================================================


struct  Sf_BFu31ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu31ll_BFu7ll) C1{ FC2{} FL:31 FL:7}



static void Test_Sf_BFu31ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "Sf_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu7ll, Sf_BFu31ll_BFu7ll)
//============================================================================


struct  Sf_BFu31ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu31ll_BFu7s) C1{ FC2{} FL:31 Fs:7}



static void Test_Sf_BFu31ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu7s");
    static STRUCT_IF_C Sf_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu7s, Sf_BFu31ll_BFu7s)
//============================================================================


struct  Sf_BFu31ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu31ll_BFu8c) C1{ FC2{} FL:31 Fc:8}



static void Test_Sf_BFu31ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu31ll_BFu8c");
    static STRUCT_IF_C Sf_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu8c, Sf_BFu31ll_BFu8c)
//============================================================================


struct  Sf_BFu31ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu31ll_BFu8i) C1{ FC2{} FL:31 Fi:8}



static void Test_Sf_BFu31ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu8i");
    static STRUCT_IF_C Sf_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu8i, Sf_BFu31ll_BFu8i)
//============================================================================


struct  Sf_BFu31ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu31ll_BFu8ll) C1{ FC2{} FL:31 FL:8}



static void Test_Sf_BFu31ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "Sf_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu8ll, Sf_BFu31ll_BFu8ll)
//============================================================================


struct  Sf_BFu31ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu31ll_BFu8s) C1{ FC2{} FL:31 Fs:8}



static void Test_Sf_BFu31ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu8s");
    static STRUCT_IF_C Sf_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu8s, Sf_BFu31ll_BFu8s)
//============================================================================


struct  Sf_BFu31ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu31ll_BFu9i) C1{ FC2{} FL:31 Fi:9}



static void Test_Sf_BFu31ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu31ll_BFu9i");
    static STRUCT_IF_C Sf_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu9i, Sf_BFu31ll_BFu9i)
//============================================================================


struct  Sf_BFu31ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu31ll_BFu9ll) C1{ FC2{} FL:31 FL:9}



static void Test_Sf_BFu31ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu31ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "Sf_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu9ll, Sf_BFu31ll_BFu9ll)
//============================================================================


struct  Sf_BFu31ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu31ll_BFu9s) C1{ FC2{} FL:31 Fs:9}



static void Test_Sf_BFu31ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu31ll_BFu9s");
    static STRUCT_IF_C Sf_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_BFu9s, Sf_BFu31ll_BFu9s)
//============================================================================


struct  Sf_BFu31ll_C  {
  struct empty v1;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 Sf_BFu31ll_C) C1{ FC2{} FL:31 Fc}



static void Test_Sf_BFu31ll_C()
{
  {
    init_simple_test("Sf_BFu31ll_C");
    static STRUCT_IF_C Sf_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_C");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_C, Sf_BFu31ll_C)
//============================================================================


struct  Sf_BFu31ll_D  {
  struct empty v1;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 Sf_BFu31ll_D) C1{ FC2{} FL:31 FL}



static void Test_Sf_BFu31ll_D()
{
  {
    init_simple_test("Sf_BFu31ll_D");
    static STRUCT_IF_C Sf_BFu31ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_D, Sf_BFu31ll_D)
//============================================================================


struct  Sf_BFu31ll_F  {
  struct empty v1;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 Sf_BFu31ll_F) C1{ FC2{} FL:31 Fi}



static void Test_Sf_BFu31ll_F()
{
  {
    init_simple_test("Sf_BFu31ll_F");
    static STRUCT_IF_C Sf_BFu31ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_F, Sf_BFu31ll_F)
//============================================================================


struct  Sf_BFu31ll_I  {
  struct empty v1;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 Sf_BFu31ll_I) C1{ FC2{} FL:31 Fi}



static void Test_Sf_BFu31ll_I()
{
  {
    init_simple_test("Sf_BFu31ll_I");
    static STRUCT_IF_C Sf_BFu31ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_I, Sf_BFu31ll_I)
//============================================================================


struct  Sf_BFu31ll_Ip  {
  struct empty v1;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 Sf_BFu31ll_Ip) C1{ FC2{} FL:31 Fp}



static void Test_Sf_BFu31ll_Ip()
{
  {
    init_simple_test("Sf_BFu31ll_Ip");
    static STRUCT_IF_C Sf_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Ip, Sf_BFu31ll_Ip)
//============================================================================


struct  Sf_BFu31ll_L  {
  struct empty v1;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 Sf_BFu31ll_L) C1{ FC2{} FL:31 FL}



static void Test_Sf_BFu31ll_L()
{
  {
    init_simple_test("Sf_BFu31ll_L");
    static STRUCT_IF_C Sf_BFu31ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_L, Sf_BFu31ll_L)
//============================================================================


struct  Sf_BFu31ll_S  {
  struct empty v1;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 Sf_BFu31ll_S) C1{ FC2{} FL:31 Fs}



static void Test_Sf_BFu31ll_S()
{
  {
    init_simple_test("Sf_BFu31ll_S");
    static STRUCT_IF_C Sf_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_S, Sf_BFu31ll_S)
//============================================================================


struct  Sf_BFu31ll_Sf  {
  struct empty v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Sf_BFu31ll_Sf) C1{ FC2{} FL:31 FC2}



static void Test_Sf_BFu31ll_Sf()
{
  {
    init_simple_test("Sf_BFu31ll_Sf");
    static STRUCT_IF_C Sf_BFu31ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Sf, Sf_BFu31ll_Sf)
//============================================================================


struct  Sf_BFu31ll_Uc  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 Sf_BFu31ll_Uc) C1{ FC2{} FL:31 Fc}



static void Test_Sf_BFu31ll_Uc()
{
  {
    init_simple_test("Sf_BFu31ll_Uc");
    static STRUCT_IF_C Sf_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Uc, Sf_BFu31ll_Uc)
//============================================================================


struct  Sf_BFu31ll_Ui  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 Sf_BFu31ll_Ui) C1{ FC2{} FL:31 Fi}



static void Test_Sf_BFu31ll_Ui()
{
  {
    init_simple_test("Sf_BFu31ll_Ui");
    static STRUCT_IF_C Sf_BFu31ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Ui, Sf_BFu31ll_Ui)
//============================================================================


struct  Sf_BFu31ll_Ul  {
  struct empty v1;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 Sf_BFu31ll_Ul) C1{ FC2{} FL:31 FL}



static void Test_Sf_BFu31ll_Ul()
{
  {
    init_simple_test("Sf_BFu31ll_Ul");
    static STRUCT_IF_C Sf_BFu31ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Ul, Sf_BFu31ll_Ul)
//============================================================================


struct  Sf_BFu31ll_Us  {
  struct empty v1;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 Sf_BFu31ll_Us) C1{ FC2{} FL:31 Fs}



static void Test_Sf_BFu31ll_Us()
{
  {
    init_simple_test("Sf_BFu31ll_Us");
    static STRUCT_IF_C Sf_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Us, Sf_BFu31ll_Us)
//============================================================================


struct  Sf_BFu31ll_Vp  {
  struct empty v1;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 Sf_BFu31ll_Vp) C1{ FC2{} FL:31 Fp}



static void Test_Sf_BFu31ll_Vp()
{
  {
    init_simple_test("Sf_BFu31ll_Vp");
    static STRUCT_IF_C Sf_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu31ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu31ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 31, 1, "Sf_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 31, hide_ull(1LL<<30), "Sf_BFu31ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu31ll_Vp, Sf_BFu31ll_Vp)
//============================================================================


struct  Sf_BFu32i  {
  struct empty v1;
  unsigned int v2:32;
};
//SIG(1 Sf_BFu32i) C1{ FC2{} Fi:32}



static void Test_Sf_BFu32i()
{
  {
    init_simple_test("Sf_BFu32i");
    static STRUCT_IF_C Sf_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i, Sf_BFu32i)
//============================================================================


struct  Sf_BFu32i_BFu15i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu32i_BFu15i) C1{ FC2{} Fi:32 Fi:15}



static void Test_Sf_BFu32i_BFu15i()
{
  {
    init_simple_test("Sf_BFu32i_BFu15i");
    static STRUCT_IF_C Sf_BFu32i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu15i, Sf_BFu32i_BFu15i)
//============================================================================


struct  Sf_BFu32i_BFu15ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu32i_BFu15ll) C1{ FC2{} Fi:32 FL:15}



static void Test_Sf_BFu32i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu15ll");
    static STRUCT_IF_C Sf_BFu32i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu15ll, Sf_BFu32i_BFu15ll)
//============================================================================


struct  Sf_BFu32i_BFu15s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu32i_BFu15s) C1{ FC2{} Fi:32 Fs:15}



static void Test_Sf_BFu32i_BFu15s()
{
  {
    init_simple_test("Sf_BFu32i_BFu15s");
    static STRUCT_IF_C Sf_BFu32i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu15s, Sf_BFu32i_BFu15s)
//============================================================================


struct  Sf_BFu32i_BFu16i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu32i_BFu16i) C1{ FC2{} Fi:32 Fi:16}



static void Test_Sf_BFu32i_BFu16i()
{
  {
    init_simple_test("Sf_BFu32i_BFu16i");
    static STRUCT_IF_C Sf_BFu32i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu16i, Sf_BFu32i_BFu16i)
//============================================================================


struct  Sf_BFu32i_BFu16ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu32i_BFu16ll) C1{ FC2{} Fi:32 FL:16}



static void Test_Sf_BFu32i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu16ll");
    static STRUCT_IF_C Sf_BFu32i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu16ll, Sf_BFu32i_BFu16ll)
//============================================================================


struct  Sf_BFu32i_BFu16s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu32i_BFu16s) C1{ FC2{} Fi:32 Fs:16}



static void Test_Sf_BFu32i_BFu16s()
{
  {
    init_simple_test("Sf_BFu32i_BFu16s");
    static STRUCT_IF_C Sf_BFu32i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu16s, Sf_BFu32i_BFu16s)
//============================================================================


struct  Sf_BFu32i_BFu17i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu32i_BFu17i) C1{ FC2{} Fi:32 Fi:17}



static void Test_Sf_BFu32i_BFu17i()
{
  {
    init_simple_test("Sf_BFu32i_BFu17i");
    static STRUCT_IF_C Sf_BFu32i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu17i, Sf_BFu32i_BFu17i)
//============================================================================


struct  Sf_BFu32i_BFu17ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu32i_BFu17ll) C1{ FC2{} Fi:32 FL:17}



static void Test_Sf_BFu32i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu17ll");
    static STRUCT_IF_C Sf_BFu32i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu17ll, Sf_BFu32i_BFu17ll)
//============================================================================


struct  Sf_BFu32i_BFu1c  {
  struct empty v1;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu32i_BFu1c) C1{ FC2{} Fi:32 Fc:1}



static void Test_Sf_BFu32i_BFu1c()
{
  {
    init_simple_test("Sf_BFu32i_BFu1c");
    static STRUCT_IF_C Sf_BFu32i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu1c, Sf_BFu32i_BFu1c)
//============================================================================


struct  Sf_BFu32i_BFu1i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu32i_BFu1i) C1{ FC2{} Fi:32 Fi:1}



static void Test_Sf_BFu32i_BFu1i()
{
  {
    init_simple_test("Sf_BFu32i_BFu1i");
    static STRUCT_IF_C Sf_BFu32i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu1i, Sf_BFu32i_BFu1i)
//============================================================================


struct  Sf_BFu32i_BFu1ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu32i_BFu1ll) C1{ FC2{} Fi:32 FL:1}



static void Test_Sf_BFu32i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu1ll");
    static STRUCT_IF_C Sf_BFu32i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu1ll, Sf_BFu32i_BFu1ll)
//============================================================================


struct  Sf_BFu32i_BFu1s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu32i_BFu1s) C1{ FC2{} Fi:32 Fs:1}



static void Test_Sf_BFu32i_BFu1s()
{
  {
    init_simple_test("Sf_BFu32i_BFu1s");
    static STRUCT_IF_C Sf_BFu32i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu1s, Sf_BFu32i_BFu1s)
//============================================================================


struct  Sf_BFu32i_BFu31i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu32i_BFu31i) C1{ FC2{} Fi:32 Fi:31}



static void Test_Sf_BFu32i_BFu31i()
{
  {
    init_simple_test("Sf_BFu32i_BFu31i");
    static STRUCT_IF_C Sf_BFu32i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu31i, Sf_BFu32i_BFu31i)
//============================================================================


struct  Sf_BFu32i_BFu31ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu32i_BFu31ll) C1{ FC2{} Fi:32 FL:31}



static void Test_Sf_BFu32i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu31ll");
    static STRUCT_IF_C Sf_BFu32i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu31ll, Sf_BFu32i_BFu31ll)
//============================================================================


struct  Sf_BFu32i_BFu32i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu32i_BFu32i) C1{ FC2{} Fi:32 Fi:32}



static void Test_Sf_BFu32i_BFu32i()
{
  {
    init_simple_test("Sf_BFu32i_BFu32i");
    static STRUCT_IF_C Sf_BFu32i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu32i, Sf_BFu32i_BFu32i)
//============================================================================


struct  Sf_BFu32i_BFu32ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu32i_BFu32ll) C1{ FC2{} Fi:32 FL:32}



static void Test_Sf_BFu32i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu32ll");
    static STRUCT_IF_C Sf_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu32ll, Sf_BFu32i_BFu32ll)
//============================================================================


struct  Sf_BFu32i_BFu33  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu32i_BFu33) C1{ FC2{} Fi:32 FL:33}



static void Test_Sf_BFu32i_BFu33()
{
  {
    init_simple_test("Sf_BFu32i_BFu33");
    static STRUCT_IF_C Sf_BFu32i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_BFu32i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu33, Sf_BFu32i_BFu33)
//============================================================================


struct  Sf_BFu32i_BFu7c  {
  struct empty v1;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu32i_BFu7c) C1{ FC2{} Fi:32 Fc:7}



static void Test_Sf_BFu32i_BFu7c()
{
  {
    init_simple_test("Sf_BFu32i_BFu7c");
    static STRUCT_IF_C Sf_BFu32i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu7c, Sf_BFu32i_BFu7c)
//============================================================================


struct  Sf_BFu32i_BFu7i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu32i_BFu7i) C1{ FC2{} Fi:32 Fi:7}



static void Test_Sf_BFu32i_BFu7i()
{
  {
    init_simple_test("Sf_BFu32i_BFu7i");
    static STRUCT_IF_C Sf_BFu32i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu7i, Sf_BFu32i_BFu7i)
//============================================================================


struct  Sf_BFu32i_BFu7ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu32i_BFu7ll) C1{ FC2{} Fi:32 FL:7}



static void Test_Sf_BFu32i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu7ll");
    static STRUCT_IF_C Sf_BFu32i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu7ll, Sf_BFu32i_BFu7ll)
//============================================================================


struct  Sf_BFu32i_BFu7s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu32i_BFu7s) C1{ FC2{} Fi:32 Fs:7}



static void Test_Sf_BFu32i_BFu7s()
{
  {
    init_simple_test("Sf_BFu32i_BFu7s");
    static STRUCT_IF_C Sf_BFu32i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu7s, Sf_BFu32i_BFu7s)
//============================================================================


struct  Sf_BFu32i_BFu8c  {
  struct empty v1;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu32i_BFu8c) C1{ FC2{} Fi:32 Fc:8}



static void Test_Sf_BFu32i_BFu8c()
{
  {
    init_simple_test("Sf_BFu32i_BFu8c");
    static STRUCT_IF_C Sf_BFu32i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu8c, Sf_BFu32i_BFu8c)
//============================================================================


struct  Sf_BFu32i_BFu8i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu32i_BFu8i) C1{ FC2{} Fi:32 Fi:8}



static void Test_Sf_BFu32i_BFu8i()
{
  {
    init_simple_test("Sf_BFu32i_BFu8i");
    static STRUCT_IF_C Sf_BFu32i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu8i, Sf_BFu32i_BFu8i)
//============================================================================


struct  Sf_BFu32i_BFu8ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu32i_BFu8ll) C1{ FC2{} Fi:32 FL:8}



static void Test_Sf_BFu32i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu8ll");
    static STRUCT_IF_C Sf_BFu32i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu8ll, Sf_BFu32i_BFu8ll)
//============================================================================


struct  Sf_BFu32i_BFu8s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu32i_BFu8s) C1{ FC2{} Fi:32 Fs:8}



static void Test_Sf_BFu32i_BFu8s()
{
  {
    init_simple_test("Sf_BFu32i_BFu8s");
    static STRUCT_IF_C Sf_BFu32i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu8s, Sf_BFu32i_BFu8s)
//============================================================================


struct  Sf_BFu32i_BFu9i  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu32i_BFu9i) C1{ FC2{} Fi:32 Fi:9}



static void Test_Sf_BFu32i_BFu9i()
{
  {
    init_simple_test("Sf_BFu32i_BFu9i");
    static STRUCT_IF_C Sf_BFu32i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu9i, Sf_BFu32i_BFu9i)
//============================================================================


struct  Sf_BFu32i_BFu9ll  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu32i_BFu9ll) C1{ FC2{} Fi:32 FL:9}



static void Test_Sf_BFu32i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu32i_BFu9ll");
    static STRUCT_IF_C Sf_BFu32i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu9ll, Sf_BFu32i_BFu9ll)
//============================================================================


struct  Sf_BFu32i_BFu9s  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu32i_BFu9s) C1{ FC2{} Fi:32 Fs:9}



static void Test_Sf_BFu32i_BFu9s()
{
  {
    init_simple_test("Sf_BFu32i_BFu9s");
    static STRUCT_IF_C Sf_BFu32i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_BFu9s, Sf_BFu32i_BFu9s)
//============================================================================


struct  Sf_BFu32i_C  {
  struct empty v1;
  unsigned int v2:32;
  char v3;
};
//SIG(1 Sf_BFu32i_C) C1{ FC2{} Fi:32 Fc}



static void Test_Sf_BFu32i_C()
{
  {
    init_simple_test("Sf_BFu32i_C");
    static STRUCT_IF_C Sf_BFu32i_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_C");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_C");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_C, Sf_BFu32i_C)
//============================================================================


struct  Sf_BFu32i_D  {
  struct empty v1;
  unsigned int v2:32;
  double v3;
};
//SIG(1 Sf_BFu32i_D) C1{ FC2{} Fi:32 FL}



static void Test_Sf_BFu32i_D()
{
  {
    init_simple_test("Sf_BFu32i_D");
    static STRUCT_IF_C Sf_BFu32i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_D");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_D, Sf_BFu32i_D)
//============================================================================


struct  Sf_BFu32i_F  {
  struct empty v1;
  unsigned int v2:32;
  float v3;
};
//SIG(1 Sf_BFu32i_F) C1{ FC2{} Fi:32 Fi}



static void Test_Sf_BFu32i_F()
{
  {
    init_simple_test("Sf_BFu32i_F");
    static STRUCT_IF_C Sf_BFu32i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_F");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_F, Sf_BFu32i_F)
//============================================================================


struct  Sf_BFu32i_I  {
  struct empty v1;
  unsigned int v2:32;
  int v3;
};
//SIG(1 Sf_BFu32i_I) C1{ FC2{} Fi:32 Fi}



static void Test_Sf_BFu32i_I()
{
  {
    init_simple_test("Sf_BFu32i_I");
    static STRUCT_IF_C Sf_BFu32i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_I");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_I, Sf_BFu32i_I)
//============================================================================


struct  Sf_BFu32i_Ip  {
  struct empty v1;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 Sf_BFu32i_Ip) C1{ FC2{} Fi:32 Fp}



static void Test_Sf_BFu32i_Ip()
{
  {
    init_simple_test("Sf_BFu32i_Ip");
    static STRUCT_IF_C Sf_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Ip, Sf_BFu32i_Ip)
//============================================================================


struct  Sf_BFu32i_L  {
  struct empty v1;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 Sf_BFu32i_L) C1{ FC2{} Fi:32 FL}



static void Test_Sf_BFu32i_L()
{
  {
    init_simple_test("Sf_BFu32i_L");
    static STRUCT_IF_C Sf_BFu32i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_L");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_L, Sf_BFu32i_L)
//============================================================================


struct  Sf_BFu32i_S  {
  struct empty v1;
  unsigned int v2:32;
  short v3;
};
//SIG(1 Sf_BFu32i_S) C1{ FC2{} Fi:32 Fs}



static void Test_Sf_BFu32i_S()
{
  {
    init_simple_test("Sf_BFu32i_S");
    static STRUCT_IF_C Sf_BFu32i_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_S");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_S");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_S, Sf_BFu32i_S)
//============================================================================


struct  Sf_BFu32i_Sf  {
  struct empty v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Sf_BFu32i_Sf) C1{ FC2{} Fi:32 FC2}



static void Test_Sf_BFu32i_Sf()
{
  {
    init_simple_test("Sf_BFu32i_Sf");
    static STRUCT_IF_C Sf_BFu32i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu32i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Sf, Sf_BFu32i_Sf)
//============================================================================


struct  Sf_BFu32i_Uc  {
  struct empty v1;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 Sf_BFu32i_Uc) C1{ FC2{} Fi:32 Fc}



static void Test_Sf_BFu32i_Uc()
{
  {
    init_simple_test("Sf_BFu32i_Uc");
    static STRUCT_IF_C Sf_BFu32i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Uc, Sf_BFu32i_Uc)
//============================================================================


struct  Sf_BFu32i_Ui  {
  struct empty v1;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 Sf_BFu32i_Ui) C1{ FC2{} Fi:32 Fi}



static void Test_Sf_BFu32i_Ui()
{
  {
    init_simple_test("Sf_BFu32i_Ui");
    static STRUCT_IF_C Sf_BFu32i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Ui, Sf_BFu32i_Ui)
//============================================================================


struct  Sf_BFu32i_Ul  {
  struct empty v1;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 Sf_BFu32i_Ul) C1{ FC2{} Fi:32 FL}



static void Test_Sf_BFu32i_Ul()
{
  {
    init_simple_test("Sf_BFu32i_Ul");
    static STRUCT_IF_C Sf_BFu32i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Ul, Sf_BFu32i_Ul)
//============================================================================


struct  Sf_BFu32i_Us  {
  struct empty v1;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 Sf_BFu32i_Us) C1{ FC2{} Fi:32 Fs}



static void Test_Sf_BFu32i_Us()
{
  {
    init_simple_test("Sf_BFu32i_Us");
    static STRUCT_IF_C Sf_BFu32i_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu32i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Us");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Us, Sf_BFu32i_Us)
//============================================================================


struct  Sf_BFu32i_Vp  {
  struct empty v1;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 Sf_BFu32i_Vp) C1{ FC2{} Fi:32 Fp}



static void Test_Sf_BFu32i_Vp()
{
  {
    init_simple_test("Sf_BFu32i_Vp");
    static STRUCT_IF_C Sf_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu32i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32i_Vp, Sf_BFu32i_Vp)
//============================================================================


struct  Sf_BFu32ll  {
  struct empty v1;
  __tsu64 v2:32;
};
//SIG(1 Sf_BFu32ll) C1{ FC2{} FL:32}



static void Test_Sf_BFu32ll()
{
  {
    init_simple_test("Sf_BFu32ll");
    static STRUCT_IF_C Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll, Sf_BFu32ll)
//============================================================================


struct  Sf_BFu32ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu32ll_BFu15i) C1{ FC2{} FL:32 Fi:15}



static void Test_Sf_BFu32ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu15i");
    static STRUCT_IF_C Sf_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu15i, Sf_BFu32ll_BFu15i)
//============================================================================


struct  Sf_BFu32ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu32ll_BFu15ll) C1{ FC2{} FL:32 FL:15}



static void Test_Sf_BFu32ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu15ll, Sf_BFu32ll_BFu15ll)
//============================================================================


struct  Sf_BFu32ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu32ll_BFu15s) C1{ FC2{} FL:32 Fs:15}



static void Test_Sf_BFu32ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu15s");
    static STRUCT_IF_C Sf_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu15s, Sf_BFu32ll_BFu15s)
//============================================================================


struct  Sf_BFu32ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu32ll_BFu16i) C1{ FC2{} FL:32 Fi:16}



static void Test_Sf_BFu32ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu16i");
    static STRUCT_IF_C Sf_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu16i, Sf_BFu32ll_BFu16i)
//============================================================================


struct  Sf_BFu32ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu32ll_BFu16ll) C1{ FC2{} FL:32 FL:16}



static void Test_Sf_BFu32ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu16ll, Sf_BFu32ll_BFu16ll)
//============================================================================


struct  Sf_BFu32ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu32ll_BFu16s) C1{ FC2{} FL:32 Fs:16}



static void Test_Sf_BFu32ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu16s");
    static STRUCT_IF_C Sf_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu16s, Sf_BFu32ll_BFu16s)
//============================================================================


struct  Sf_BFu32ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu32ll_BFu17i) C1{ FC2{} FL:32 Fi:17}



static void Test_Sf_BFu32ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu17i");
    static STRUCT_IF_C Sf_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu17i, Sf_BFu32ll_BFu17i)
//============================================================================


struct  Sf_BFu32ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu32ll_BFu17ll) C1{ FC2{} FL:32 FL:17}



static void Test_Sf_BFu32ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu17ll, Sf_BFu32ll_BFu17ll)
//============================================================================


struct  Sf_BFu32ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu32ll_BFu1c) C1{ FC2{} FL:32 Fc:1}



static void Test_Sf_BFu32ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu32ll_BFu1c");
    static STRUCT_IF_C Sf_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu1c, Sf_BFu32ll_BFu1c)
//============================================================================


struct  Sf_BFu32ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu32ll_BFu1i) C1{ FC2{} FL:32 Fi:1}



static void Test_Sf_BFu32ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu1i");
    static STRUCT_IF_C Sf_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu1i, Sf_BFu32ll_BFu1i)
//============================================================================


struct  Sf_BFu32ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu32ll_BFu1ll) C1{ FC2{} FL:32 FL:1}



static void Test_Sf_BFu32ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu1ll, Sf_BFu32ll_BFu1ll)
//============================================================================


struct  Sf_BFu32ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu32ll_BFu1s) C1{ FC2{} FL:32 Fs:1}



static void Test_Sf_BFu32ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu1s");
    static STRUCT_IF_C Sf_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu1s, Sf_BFu32ll_BFu1s)
//============================================================================


struct  Sf_BFu32ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu32ll_BFu31i) C1{ FC2{} FL:32 Fi:31}



static void Test_Sf_BFu32ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu31i");
    static STRUCT_IF_C Sf_BFu32ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu31i, Sf_BFu32ll_BFu31i)
//============================================================================


struct  Sf_BFu32ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu32ll_BFu31ll) C1{ FC2{} FL:32 FL:31}



static void Test_Sf_BFu32ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu31ll, Sf_BFu32ll_BFu31ll)
//============================================================================


struct  Sf_BFu32ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu32ll_BFu32i) C1{ FC2{} FL:32 Fi:32}



static void Test_Sf_BFu32ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu32i");
    static STRUCT_IF_C Sf_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu32i, Sf_BFu32ll_BFu32i)
//============================================================================


struct  Sf_BFu32ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu32ll_BFu32ll) C1{ FC2{} FL:32 FL:32}



static void Test_Sf_BFu32ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu32ll, Sf_BFu32ll_BFu32ll)
//============================================================================


struct  Sf_BFu32ll_BFu33  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu32ll_BFu33) C1{ FC2{} FL:32 FL:33}



static void Test_Sf_BFu32ll_BFu33()
{
  {
    init_simple_test("Sf_BFu32ll_BFu33");
    static STRUCT_IF_C Sf_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu33, Sf_BFu32ll_BFu33)
//============================================================================


struct  Sf_BFu32ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu32ll_BFu7c) C1{ FC2{} FL:32 Fc:7}



static void Test_Sf_BFu32ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu32ll_BFu7c");
    static STRUCT_IF_C Sf_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu7c, Sf_BFu32ll_BFu7c)
//============================================================================


struct  Sf_BFu32ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu32ll_BFu7i) C1{ FC2{} FL:32 Fi:7}



static void Test_Sf_BFu32ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu7i");
    static STRUCT_IF_C Sf_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu7i, Sf_BFu32ll_BFu7i)
//============================================================================


struct  Sf_BFu32ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu32ll_BFu7ll) C1{ FC2{} FL:32 FL:7}



static void Test_Sf_BFu32ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu7ll, Sf_BFu32ll_BFu7ll)
//============================================================================


struct  Sf_BFu32ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu32ll_BFu7s) C1{ FC2{} FL:32 Fs:7}



static void Test_Sf_BFu32ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu7s");
    static STRUCT_IF_C Sf_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu7s, Sf_BFu32ll_BFu7s)
//============================================================================


struct  Sf_BFu32ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu32ll_BFu8c) C1{ FC2{} FL:32 Fc:8}



static void Test_Sf_BFu32ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu32ll_BFu8c");
    static STRUCT_IF_C Sf_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu8c, Sf_BFu32ll_BFu8c)
//============================================================================


struct  Sf_BFu32ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu32ll_BFu8i) C1{ FC2{} FL:32 Fi:8}



static void Test_Sf_BFu32ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu8i");
    static STRUCT_IF_C Sf_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu8i, Sf_BFu32ll_BFu8i)
//============================================================================


struct  Sf_BFu32ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu32ll_BFu8ll) C1{ FC2{} FL:32 FL:8}



static void Test_Sf_BFu32ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu8ll, Sf_BFu32ll_BFu8ll)
//============================================================================


struct  Sf_BFu32ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu32ll_BFu8s) C1{ FC2{} FL:32 Fs:8}



static void Test_Sf_BFu32ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu8s");
    static STRUCT_IF_C Sf_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu8s, Sf_BFu32ll_BFu8s)
//============================================================================


struct  Sf_BFu32ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu32ll_BFu9i) C1{ FC2{} FL:32 Fi:9}



static void Test_Sf_BFu32ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu32ll_BFu9i");
    static STRUCT_IF_C Sf_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu9i, Sf_BFu32ll_BFu9i)
//============================================================================


struct  Sf_BFu32ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu32ll_BFu9ll) C1{ FC2{} FL:32 FL:9}



static void Test_Sf_BFu32ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu32ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu9ll, Sf_BFu32ll_BFu9ll)
//============================================================================


struct  Sf_BFu32ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu32ll_BFu9s) C1{ FC2{} FL:32 Fs:9}



static void Test_Sf_BFu32ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu32ll_BFu9s");
    static STRUCT_IF_C Sf_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_BFu9s, Sf_BFu32ll_BFu9s)
//============================================================================


struct  Sf_BFu32ll_C  {
  struct empty v1;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 Sf_BFu32ll_C) C1{ FC2{} FL:32 Fc}



static void Test_Sf_BFu32ll_C()
{
  {
    init_simple_test("Sf_BFu32ll_C");
    static STRUCT_IF_C Sf_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_C");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_C, Sf_BFu32ll_C)
//============================================================================


struct  Sf_BFu32ll_D  {
  struct empty v1;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 Sf_BFu32ll_D) C1{ FC2{} FL:32 FL}



static void Test_Sf_BFu32ll_D()
{
  {
    init_simple_test("Sf_BFu32ll_D");
    static STRUCT_IF_C Sf_BFu32ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_D, Sf_BFu32ll_D)
//============================================================================


struct  Sf_BFu32ll_F  {
  struct empty v1;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 Sf_BFu32ll_F) C1{ FC2{} FL:32 Fi}



static void Test_Sf_BFu32ll_F()
{
  {
    init_simple_test("Sf_BFu32ll_F");
    static STRUCT_IF_C Sf_BFu32ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_F, Sf_BFu32ll_F)
//============================================================================


struct  Sf_BFu32ll_I  {
  struct empty v1;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 Sf_BFu32ll_I) C1{ FC2{} FL:32 Fi}



static void Test_Sf_BFu32ll_I()
{
  {
    init_simple_test("Sf_BFu32ll_I");
    static STRUCT_IF_C Sf_BFu32ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_I, Sf_BFu32ll_I)
//============================================================================


struct  Sf_BFu32ll_Ip  {
  struct empty v1;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 Sf_BFu32ll_Ip) C1{ FC2{} FL:32 Fp}



static void Test_Sf_BFu32ll_Ip()
{
  {
    init_simple_test("Sf_BFu32ll_Ip");
    static STRUCT_IF_C Sf_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Ip, Sf_BFu32ll_Ip)
//============================================================================


struct  Sf_BFu32ll_L  {
  struct empty v1;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 Sf_BFu32ll_L) C1{ FC2{} FL:32 FL}



static void Test_Sf_BFu32ll_L()
{
  {
    init_simple_test("Sf_BFu32ll_L");
    static STRUCT_IF_C Sf_BFu32ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_L, Sf_BFu32ll_L)
//============================================================================


struct  Sf_BFu32ll_S  {
  struct empty v1;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 Sf_BFu32ll_S) C1{ FC2{} FL:32 Fs}



static void Test_Sf_BFu32ll_S()
{
  {
    init_simple_test("Sf_BFu32ll_S");
    static STRUCT_IF_C Sf_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_S");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_S, Sf_BFu32ll_S)
//============================================================================


struct  Sf_BFu32ll_Sf  {
  struct empty v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Sf_BFu32ll_Sf) C1{ FC2{} FL:32 FC2}



static void Test_Sf_BFu32ll_Sf()
{
  {
    init_simple_test("Sf_BFu32ll_Sf");
    static STRUCT_IF_C Sf_BFu32ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Sf");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Sf, Sf_BFu32ll_Sf)
//============================================================================


struct  Sf_BFu32ll_Uc  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 Sf_BFu32ll_Uc) C1{ FC2{} FL:32 Fc}



static void Test_Sf_BFu32ll_Uc()
{
  {
    init_simple_test("Sf_BFu32ll_Uc");
    static STRUCT_IF_C Sf_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Uc");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Uc, Sf_BFu32ll_Uc)
//============================================================================


struct  Sf_BFu32ll_Ui  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 Sf_BFu32ll_Ui) C1{ FC2{} FL:32 Fi}



static void Test_Sf_BFu32ll_Ui()
{
  {
    init_simple_test("Sf_BFu32ll_Ui");
    static STRUCT_IF_C Sf_BFu32ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Ui, Sf_BFu32ll_Ui)
//============================================================================


struct  Sf_BFu32ll_Ul  {
  struct empty v1;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 Sf_BFu32ll_Ul) C1{ FC2{} FL:32 FL}



static void Test_Sf_BFu32ll_Ul()
{
  {
    init_simple_test("Sf_BFu32ll_Ul");
    static STRUCT_IF_C Sf_BFu32ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Ul, Sf_BFu32ll_Ul)
//============================================================================


struct  Sf_BFu32ll_Us  {
  struct empty v1;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 Sf_BFu32ll_Us) C1{ FC2{} FL:32 Fs}



static void Test_Sf_BFu32ll_Us()
{
  {
    init_simple_test("Sf_BFu32ll_Us");
    static STRUCT_IF_C Sf_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Us");
    check_field_offset(lv, v3, 4, "Sf_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Us, Sf_BFu32ll_Us)
//============================================================================


struct  Sf_BFu32ll_Vp  {
  struct empty v1;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 Sf_BFu32ll_Vp) C1{ FC2{} FL:32 Fp}



static void Test_Sf_BFu32ll_Vp()
{
  {
    init_simple_test("Sf_BFu32ll_Vp");
    static STRUCT_IF_C Sf_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu32ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu32ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 32, 1, "Sf_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 32, hide_ull(1LL<<31), "Sf_BFu32ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu32ll_Vp, Sf_BFu32ll_Vp)
//============================================================================


struct  Sf_BFu33  {
  struct empty v1;
  __tsu64 v2:33;
};
//SIG(1 Sf_BFu33) C1{ FC2{} FL:33}



static void Test_Sf_BFu33()
{
  {
    init_simple_test("Sf_BFu33");
    static STRUCT_IF_C Sf_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33, Sf_BFu33)
//============================================================================


struct  Sf_BFu33_BFu15i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu33_BFu15i) C1{ FC2{} FL:33 Fi:15}



static void Test_Sf_BFu33_BFu15i()
{
  {
    init_simple_test("Sf_BFu33_BFu15i");
    static STRUCT_IF_C Sf_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "Sf_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu15i, Sf_BFu33_BFu15i)
//============================================================================


struct  Sf_BFu33_BFu15ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu33_BFu15ll) C1{ FC2{} FL:33 FL:15}



static void Test_Sf_BFu33_BFu15ll()
{
  {
    init_simple_test("Sf_BFu33_BFu15ll");
    static STRUCT_IF_C Sf_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "Sf_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu15ll, Sf_BFu33_BFu15ll)
//============================================================================


struct  Sf_BFu33_BFu15s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu33_BFu15s) C1{ FC2{} FL:33 Fs:15}



static void Test_Sf_BFu33_BFu15s()
{
  {
    init_simple_test("Sf_BFu33_BFu15s");
    static STRUCT_IF_C Sf_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "Sf_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "Sf_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu15s, Sf_BFu33_BFu15s)
//============================================================================


struct  Sf_BFu33_BFu16i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu33_BFu16i) C1{ FC2{} FL:33 Fi:16}



static void Test_Sf_BFu33_BFu16i()
{
  {
    init_simple_test("Sf_BFu33_BFu16i");
    static STRUCT_IF_C Sf_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "Sf_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "Sf_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu16i, Sf_BFu33_BFu16i)
//============================================================================


struct  Sf_BFu33_BFu16ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu33_BFu16ll) C1{ FC2{} FL:33 FL:16}



static void Test_Sf_BFu33_BFu16ll()
{
  {
    init_simple_test("Sf_BFu33_BFu16ll");
    static STRUCT_IF_C Sf_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "Sf_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "Sf_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu16ll, Sf_BFu33_BFu16ll)
//============================================================================


struct  Sf_BFu33_BFu16s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu33_BFu16s) C1{ FC2{} FL:33 Fs:16}



static void Test_Sf_BFu33_BFu16s()
{
  {
    init_simple_test("Sf_BFu33_BFu16s");
    static STRUCT_IF_C Sf_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "Sf_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "Sf_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu16s, Sf_BFu33_BFu16s)
//============================================================================


struct  Sf_BFu33_BFu17i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu33_BFu17i) C1{ FC2{} FL:33 Fi:17}



static void Test_Sf_BFu33_BFu17i()
{
  {
    init_simple_test("Sf_BFu33_BFu17i");
    static STRUCT_IF_C Sf_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "Sf_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "Sf_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu17i, Sf_BFu33_BFu17i)
//============================================================================


struct  Sf_BFu33_BFu17ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu33_BFu17ll) C1{ FC2{} FL:33 FL:17}



static void Test_Sf_BFu33_BFu17ll()
{
  {
    init_simple_test("Sf_BFu33_BFu17ll");
    static STRUCT_IF_C Sf_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "Sf_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "Sf_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu17ll, Sf_BFu33_BFu17ll)
//============================================================================


struct  Sf_BFu33_BFu1c  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu33_BFu1c) C1{ FC2{} FL:33 Fc:1}



static void Test_Sf_BFu33_BFu1c()
{
  {
    init_simple_test("Sf_BFu33_BFu1c");
    static STRUCT_IF_C Sf_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "Sf_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu1c, Sf_BFu33_BFu1c)
//============================================================================


struct  Sf_BFu33_BFu1i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu33_BFu1i) C1{ FC2{} FL:33 Fi:1}



static void Test_Sf_BFu33_BFu1i()
{
  {
    init_simple_test("Sf_BFu33_BFu1i");
    static STRUCT_IF_C Sf_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "Sf_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu1i, Sf_BFu33_BFu1i)
//============================================================================


struct  Sf_BFu33_BFu1ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu33_BFu1ll) C1{ FC2{} FL:33 FL:1}



static void Test_Sf_BFu33_BFu1ll()
{
  {
    init_simple_test("Sf_BFu33_BFu1ll");
    static STRUCT_IF_C Sf_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "Sf_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu1ll, Sf_BFu33_BFu1ll)
//============================================================================


struct  Sf_BFu33_BFu1s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu33_BFu1s) C1{ FC2{} FL:33 Fs:1}



static void Test_Sf_BFu33_BFu1s()
{
  {
    init_simple_test("Sf_BFu33_BFu1s");
    static STRUCT_IF_C Sf_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "Sf_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu1s, Sf_BFu33_BFu1s)
//============================================================================


struct  Sf_BFu33_BFu31i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu33_BFu31i) C1{ FC2{} FL:33 Fi:31}



static void Test_Sf_BFu33_BFu31i()
{
  {
    init_simple_test("Sf_BFu33_BFu31i");
    static STRUCT_IF_C Sf_BFu33_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "Sf_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "Sf_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu31i, Sf_BFu33_BFu31i)
//============================================================================


struct  Sf_BFu33_BFu31ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu33_BFu31ll) C1{ FC2{} FL:33 FL:31}



static void Test_Sf_BFu33_BFu31ll()
{
  {
    init_simple_test("Sf_BFu33_BFu31ll");
    static STRUCT_IF_C Sf_BFu33_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "Sf_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "Sf_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu31ll, Sf_BFu33_BFu31ll)
//============================================================================


struct  Sf_BFu33_BFu32i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu33_BFu32i) C1{ FC2{} FL:33 Fi:32}



static void Test_Sf_BFu33_BFu32i()
{
  {
    init_simple_test("Sf_BFu33_BFu32i");
    static STRUCT_IF_C Sf_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu32i, Sf_BFu33_BFu32i)
//============================================================================


struct  Sf_BFu33_BFu32ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu33_BFu32ll) C1{ FC2{} FL:33 FL:32}



static void Test_Sf_BFu33_BFu32ll()
{
  {
    init_simple_test("Sf_BFu33_BFu32ll");
    static STRUCT_IF_C Sf_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "Sf_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "Sf_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu32ll, Sf_BFu33_BFu32ll)
//============================================================================


struct  Sf_BFu33_BFu33  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu33_BFu33) C1{ FC2{} FL:33 FL:33}



static void Test_Sf_BFu33_BFu33()
{
  {
    init_simple_test("Sf_BFu33_BFu33");
    static STRUCT_IF_C Sf_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "Sf_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "Sf_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu33, Sf_BFu33_BFu33)
//============================================================================


struct  Sf_BFu33_BFu7c  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu33_BFu7c) C1{ FC2{} FL:33 Fc:7}



static void Test_Sf_BFu33_BFu7c()
{
  {
    init_simple_test("Sf_BFu33_BFu7c");
    static STRUCT_IF_C Sf_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "Sf_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu7c, Sf_BFu33_BFu7c)
//============================================================================


struct  Sf_BFu33_BFu7i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu33_BFu7i) C1{ FC2{} FL:33 Fi:7}



static void Test_Sf_BFu33_BFu7i()
{
  {
    init_simple_test("Sf_BFu33_BFu7i");
    static STRUCT_IF_C Sf_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "Sf_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu7i, Sf_BFu33_BFu7i)
//============================================================================


struct  Sf_BFu33_BFu7ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu33_BFu7ll) C1{ FC2{} FL:33 FL:7}



static void Test_Sf_BFu33_BFu7ll()
{
  {
    init_simple_test("Sf_BFu33_BFu7ll");
    static STRUCT_IF_C Sf_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "Sf_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu7ll, Sf_BFu33_BFu7ll)
//============================================================================


struct  Sf_BFu33_BFu7s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu33_BFu7s) C1{ FC2{} FL:33 Fs:7}



static void Test_Sf_BFu33_BFu7s()
{
  {
    init_simple_test("Sf_BFu33_BFu7s");
    static STRUCT_IF_C Sf_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "Sf_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "Sf_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu7s, Sf_BFu33_BFu7s)
//============================================================================


struct  Sf_BFu33_BFu8c  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu33_BFu8c) C1{ FC2{} FL:33 Fc:8}



static void Test_Sf_BFu33_BFu8c()
{
  {
    init_simple_test("Sf_BFu33_BFu8c");
    static STRUCT_IF_C Sf_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "Sf_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu8c, Sf_BFu33_BFu8c)
//============================================================================


struct  Sf_BFu33_BFu8i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu33_BFu8i) C1{ FC2{} FL:33 Fi:8}



static void Test_Sf_BFu33_BFu8i()
{
  {
    init_simple_test("Sf_BFu33_BFu8i");
    static STRUCT_IF_C Sf_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "Sf_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu8i, Sf_BFu33_BFu8i)
//============================================================================


struct  Sf_BFu33_BFu8ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu33_BFu8ll) C1{ FC2{} FL:33 FL:8}



static void Test_Sf_BFu33_BFu8ll()
{
  {
    init_simple_test("Sf_BFu33_BFu8ll");
    static STRUCT_IF_C Sf_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "Sf_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu8ll, Sf_BFu33_BFu8ll)
//============================================================================


struct  Sf_BFu33_BFu8s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu33_BFu8s) C1{ FC2{} FL:33 Fs:8}



static void Test_Sf_BFu33_BFu8s()
{
  {
    init_simple_test("Sf_BFu33_BFu8s");
    static STRUCT_IF_C Sf_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "Sf_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "Sf_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu8s, Sf_BFu33_BFu8s)
//============================================================================


struct  Sf_BFu33_BFu9i  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu33_BFu9i) C1{ FC2{} FL:33 Fi:9}



static void Test_Sf_BFu33_BFu9i()
{
  {
    init_simple_test("Sf_BFu33_BFu9i");
    static STRUCT_IF_C Sf_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "Sf_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu9i, Sf_BFu33_BFu9i)
//============================================================================


struct  Sf_BFu33_BFu9ll  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu33_BFu9ll) C1{ FC2{} FL:33 FL:9}



static void Test_Sf_BFu33_BFu9ll()
{
  {
    init_simple_test("Sf_BFu33_BFu9ll");
    static STRUCT_IF_C Sf_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "Sf_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu9ll, Sf_BFu33_BFu9ll)
//============================================================================


struct  Sf_BFu33_BFu9s  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu33_BFu9s) C1{ FC2{} FL:33 Fs:9}



static void Test_Sf_BFu33_BFu9s()
{
  {
    init_simple_test("Sf_BFu33_BFu9s");
    static STRUCT_IF_C Sf_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "Sf_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "Sf_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_BFu9s, Sf_BFu33_BFu9s)
//============================================================================


struct  Sf_BFu33_C  {
  struct empty v1;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 Sf_BFu33_C) C1{ FC2{} FL:33 Fc}



static void Test_Sf_BFu33_C()
{
  {
    init_simple_test("Sf_BFu33_C");
    static STRUCT_IF_C Sf_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_C");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_C");
    check_field_offset(lv, v3, 5, "Sf_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_C, Sf_BFu33_C)
//============================================================================


struct  Sf_BFu33_D  {
  struct empty v1;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 Sf_BFu33_D) C1{ FC2{} FL:33 FL}



static void Test_Sf_BFu33_D()
{
  {
    init_simple_test("Sf_BFu33_D");
    static STRUCT_IF_C Sf_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(Sf_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_D");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_D");
    check_field_offset(lv, v3, 8, "Sf_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_D, Sf_BFu33_D)
//============================================================================


struct  Sf_BFu33_F  {
  struct empty v1;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 Sf_BFu33_F) C1{ FC2{} FL:33 Fi}



static void Test_Sf_BFu33_F()
{
  {
    init_simple_test("Sf_BFu33_F");
    static STRUCT_IF_C Sf_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_F");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_F");
    check_field_offset(lv, v3, 8, "Sf_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_F, Sf_BFu33_F)
//============================================================================


struct  Sf_BFu33_I  {
  struct empty v1;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 Sf_BFu33_I) C1{ FC2{} FL:33 Fi}



static void Test_Sf_BFu33_I()
{
  {
    init_simple_test("Sf_BFu33_I");
    static STRUCT_IF_C Sf_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_I");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_I");
    check_field_offset(lv, v3, 8, "Sf_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_I, Sf_BFu33_I)
//============================================================================


struct  Sf_BFu33_Ip  {
  struct empty v1;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 Sf_BFu33_Ip) C1{ FC2{} FL:33 Fp}



static void Test_Sf_BFu33_Ip()
{
  {
    init_simple_test("Sf_BFu33_Ip");
    static STRUCT_IF_C Sf_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ip");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Ip, Sf_BFu33_Ip)
//============================================================================


struct  Sf_BFu33_L  {
  struct empty v1;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 Sf_BFu33_L) C1{ FC2{} FL:33 FL}



static void Test_Sf_BFu33_L()
{
  {
    init_simple_test("Sf_BFu33_L");
    static STRUCT_IF_C Sf_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(Sf_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_L");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_L");
    check_field_offset(lv, v3, 8, "Sf_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_L, Sf_BFu33_L)
//============================================================================


struct  Sf_BFu33_S  {
  struct empty v1;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 Sf_BFu33_S) C1{ FC2{} FL:33 Fs}



static void Test_Sf_BFu33_S()
{
  {
    init_simple_test("Sf_BFu33_S");
    static STRUCT_IF_C Sf_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_S");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_S");
    check_field_offset(lv, v3, 6, "Sf_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_S, Sf_BFu33_S)
//============================================================================


struct  Sf_BFu33_Sf  {
  struct empty v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Sf_BFu33_Sf) C1{ FC2{} FL:33 FC2}



static void Test_Sf_BFu33_Sf()
{
  {
    init_simple_test("Sf_BFu33_Sf");
    static STRUCT_IF_C Sf_BFu33_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Sf");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Sf");
    check_field_offset(lv, v3, 5, "Sf_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Sf, Sf_BFu33_Sf)
//============================================================================


struct  Sf_BFu33_Uc  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 Sf_BFu33_Uc) C1{ FC2{} FL:33 Fc}



static void Test_Sf_BFu33_Uc()
{
  {
    init_simple_test("Sf_BFu33_Uc");
    static STRUCT_IF_C Sf_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Uc");
    check_field_offset(lv, v3, 5, "Sf_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Uc, Sf_BFu33_Uc)
//============================================================================


struct  Sf_BFu33_Ui  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 Sf_BFu33_Ui) C1{ FC2{} FL:33 Fi}



static void Test_Sf_BFu33_Ui()
{
  {
    init_simple_test("Sf_BFu33_Ui");
    static STRUCT_IF_C Sf_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ui");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Ui, Sf_BFu33_Ui)
//============================================================================


struct  Sf_BFu33_Ul  {
  struct empty v1;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 Sf_BFu33_Ul) C1{ FC2{} FL:33 FL}



static void Test_Sf_BFu33_Ul()
{
  {
    init_simple_test("Sf_BFu33_Ul");
    static STRUCT_IF_C Sf_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Sf_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Ul");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Ul, Sf_BFu33_Ul)
//============================================================================


struct  Sf_BFu33_Us  {
  struct empty v1;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 Sf_BFu33_Us) C1{ FC2{} FL:33 Fs}



static void Test_Sf_BFu33_Us()
{
  {
    init_simple_test("Sf_BFu33_Us");
    static STRUCT_IF_C Sf_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Us");
    check_field_offset(lv, v3, 6, "Sf_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Us, Sf_BFu33_Us)
//============================================================================


struct  Sf_BFu33_Vp  {
  struct empty v1;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 Sf_BFu33_Vp) C1{ FC2{} FL:33 Fp}



static void Test_Sf_BFu33_Vp()
{
  {
    init_simple_test("Sf_BFu33_Vp");
    static STRUCT_IF_C Sf_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu33_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu33_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 33, 1, "Sf_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 0, 33, hide_ull(1LL<<32), "Sf_BFu33_Vp");
    check_field_offset(lv, v3, 8, "Sf_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu33_Vp, Sf_BFu33_Vp)
//============================================================================


struct  Sf_BFu7c  {
  struct empty v1;
  unsigned char v2:7;
};
//SIG(1 Sf_BFu7c) C1{ FC2{} Fc:7}



static void Test_Sf_BFu7c()
{
  {
    init_simple_test("Sf_BFu7c");
    static STRUCT_IF_C Sf_BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c, Sf_BFu7c)
//============================================================================


struct  Sf_BFu7c_BFu15i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu7c_BFu15i) C1{ FC2{} Fc:7 Fi:15}



static void Test_Sf_BFu7c_BFu15i()
{
  {
    init_simple_test("Sf_BFu7c_BFu15i");
    static STRUCT_IF_C Sf_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu15i, Sf_BFu7c_BFu15i)
//============================================================================


struct  Sf_BFu7c_BFu15ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu7c_BFu15ll) C1{ FC2{} Fc:7 FL:15}



static void Test_Sf_BFu7c_BFu15ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu15ll");
    static STRUCT_IF_C Sf_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu15ll, Sf_BFu7c_BFu15ll)
//============================================================================


struct  Sf_BFu7c_BFu15s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu7c_BFu15s) C1{ FC2{} Fc:7 Fs:15}



static void Test_Sf_BFu7c_BFu15s()
{
  {
    init_simple_test("Sf_BFu7c_BFu15s");
    static STRUCT_IF_C Sf_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu15s, Sf_BFu7c_BFu15s)
//============================================================================


struct  Sf_BFu7c_BFu16i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu7c_BFu16i) C1{ FC2{} Fc:7 Fi:16}



static void Test_Sf_BFu7c_BFu16i()
{
  {
    init_simple_test("Sf_BFu7c_BFu16i");
    static STRUCT_IF_C Sf_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu16i, Sf_BFu7c_BFu16i)
//============================================================================


struct  Sf_BFu7c_BFu16ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu7c_BFu16ll) C1{ FC2{} Fc:7 FL:16}



static void Test_Sf_BFu7c_BFu16ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu16ll");
    static STRUCT_IF_C Sf_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu16ll, Sf_BFu7c_BFu16ll)
//============================================================================


struct  Sf_BFu7c_BFu16s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu7c_BFu16s) C1{ FC2{} Fc:7 Fs:16}



static void Test_Sf_BFu7c_BFu16s()
{
  {
    init_simple_test("Sf_BFu7c_BFu16s");
    static STRUCT_IF_C Sf_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu16s, Sf_BFu7c_BFu16s)
//============================================================================


struct  Sf_BFu7c_BFu17i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu7c_BFu17i) C1{ FC2{} Fc:7 Fi:17}



static void Test_Sf_BFu7c_BFu17i()
{
  {
    init_simple_test("Sf_BFu7c_BFu17i");
    static STRUCT_IF_C Sf_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu17i, Sf_BFu7c_BFu17i)
//============================================================================


struct  Sf_BFu7c_BFu17ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu7c_BFu17ll) C1{ FC2{} Fc:7 FL:17}



static void Test_Sf_BFu7c_BFu17ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu17ll");
    static STRUCT_IF_C Sf_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu17ll, Sf_BFu7c_BFu17ll)
//============================================================================


struct  Sf_BFu7c_BFu1c  {
  struct empty v1;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu7c_BFu1c) C1{ FC2{} Fc:7 Fc:1}



static void Test_Sf_BFu7c_BFu1c()
{
  {
    init_simple_test("Sf_BFu7c_BFu1c");
    static STRUCT_IF_C Sf_BFu7c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu7c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu1c, Sf_BFu7c_BFu1c)
//============================================================================


struct  Sf_BFu7c_BFu1i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu7c_BFu1i) C1{ FC2{} Fc:7 Fi:1}



static void Test_Sf_BFu7c_BFu1i()
{
  {
    init_simple_test("Sf_BFu7c_BFu1i");
    static STRUCT_IF_C Sf_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu1i, Sf_BFu7c_BFu1i)
//============================================================================


struct  Sf_BFu7c_BFu1ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu7c_BFu1ll) C1{ FC2{} Fc:7 FL:1}



static void Test_Sf_BFu7c_BFu1ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu1ll");
    static STRUCT_IF_C Sf_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu1ll, Sf_BFu7c_BFu1ll)
//============================================================================


struct  Sf_BFu7c_BFu1s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu7c_BFu1s) C1{ FC2{} Fc:7 Fs:1}



static void Test_Sf_BFu7c_BFu1s()
{
  {
    init_simple_test("Sf_BFu7c_BFu1s");
    static STRUCT_IF_C Sf_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu1s, Sf_BFu7c_BFu1s)
//============================================================================


struct  Sf_BFu7c_BFu31i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu7c_BFu31i) C1{ FC2{} Fc:7 Fi:31}



static void Test_Sf_BFu7c_BFu31i()
{
  {
    init_simple_test("Sf_BFu7c_BFu31i");
    static STRUCT_IF_C Sf_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu31i, Sf_BFu7c_BFu31i)
//============================================================================


struct  Sf_BFu7c_BFu31ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu7c_BFu31ll) C1{ FC2{} Fc:7 FL:31}



static void Test_Sf_BFu7c_BFu31ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu31ll");
    static STRUCT_IF_C Sf_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, 1, "Sf_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, hide_ull(1LL<<30), "Sf_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu31ll, Sf_BFu7c_BFu31ll)
//============================================================================


struct  Sf_BFu7c_BFu32i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu7c_BFu32i) C1{ FC2{} Fc:7 Fi:32}



static void Test_Sf_BFu7c_BFu32i()
{
  {
    init_simple_test("Sf_BFu7c_BFu32i");
    static STRUCT_IF_C Sf_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu32i, Sf_BFu7c_BFu32i)
//============================================================================


struct  Sf_BFu7c_BFu32ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu7c_BFu32ll) C1{ FC2{} Fc:7 FL:32}



static void Test_Sf_BFu7c_BFu32ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu32ll");
    static STRUCT_IF_C Sf_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, 1, "Sf_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, hide_ull(1LL<<31), "Sf_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu32ll, Sf_BFu7c_BFu32ll)
//============================================================================


struct  Sf_BFu7c_BFu33  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu7c_BFu33) C1{ FC2{} Fc:7 FL:33}



static void Test_Sf_BFu7c_BFu33()
{
  {
    init_simple_test("Sf_BFu7c_BFu33");
    static STRUCT_IF_C Sf_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, 1, "Sf_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, hide_ull(1LL<<32), "Sf_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu33, Sf_BFu7c_BFu33)
//============================================================================


struct  Sf_BFu7c_BFu7c  {
  struct empty v1;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu7c_BFu7c) C1{ FC2{} Fc:7 Fc:7}



static void Test_Sf_BFu7c_BFu7c()
{
  {
    init_simple_test("Sf_BFu7c_BFu7c");
    static STRUCT_IF_C Sf_BFu7c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu7c, Sf_BFu7c_BFu7c)
//============================================================================


struct  Sf_BFu7c_BFu7i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu7c_BFu7i) C1{ FC2{} Fc:7 Fi:7}



static void Test_Sf_BFu7c_BFu7i()
{
  {
    init_simple_test("Sf_BFu7c_BFu7i");
    static STRUCT_IF_C Sf_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu7i, Sf_BFu7c_BFu7i)
//============================================================================


struct  Sf_BFu7c_BFu7ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu7c_BFu7ll) C1{ FC2{} Fc:7 FL:7}



static void Test_Sf_BFu7c_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu7ll");
    static STRUCT_IF_C Sf_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu7ll, Sf_BFu7c_BFu7ll)
//============================================================================


struct  Sf_BFu7c_BFu7s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu7c_BFu7s) C1{ FC2{} Fc:7 Fs:7}



static void Test_Sf_BFu7c_BFu7s()
{
  {
    init_simple_test("Sf_BFu7c_BFu7s");
    static STRUCT_IF_C Sf_BFu7c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu7s, Sf_BFu7c_BFu7s)
//============================================================================


struct  Sf_BFu7c_BFu8c  {
  struct empty v1;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu7c_BFu8c) C1{ FC2{} Fc:7 Fc:8}



static void Test_Sf_BFu7c_BFu8c()
{
  {
    init_simple_test("Sf_BFu7c_BFu8c");
    static STRUCT_IF_C Sf_BFu7c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu8c, Sf_BFu7c_BFu8c)
//============================================================================


struct  Sf_BFu7c_BFu8i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu7c_BFu8i) C1{ FC2{} Fc:7 Fi:8}



static void Test_Sf_BFu7c_BFu8i()
{
  {
    init_simple_test("Sf_BFu7c_BFu8i");
    static STRUCT_IF_C Sf_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu8i, Sf_BFu7c_BFu8i)
//============================================================================


struct  Sf_BFu7c_BFu8ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu7c_BFu8ll) C1{ FC2{} Fc:7 FL:8}



static void Test_Sf_BFu7c_BFu8ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu8ll");
    static STRUCT_IF_C Sf_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu8ll, Sf_BFu7c_BFu8ll)
//============================================================================


struct  Sf_BFu7c_BFu8s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu7c_BFu8s) C1{ FC2{} Fc:7 Fs:8}



static void Test_Sf_BFu7c_BFu8s()
{
  {
    init_simple_test("Sf_BFu7c_BFu8s");
    static STRUCT_IF_C Sf_BFu7c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu8s, Sf_BFu7c_BFu8s)
//============================================================================


struct  Sf_BFu7c_BFu9i  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu7c_BFu9i) C1{ FC2{} Fc:7 Fi:9}



static void Test_Sf_BFu7c_BFu9i()
{
  {
    init_simple_test("Sf_BFu7c_BFu9i");
    static STRUCT_IF_C Sf_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu9i, Sf_BFu7c_BFu9i)
//============================================================================


struct  Sf_BFu7c_BFu9ll  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu7c_BFu9ll) C1{ FC2{} Fc:7 FL:9}



static void Test_Sf_BFu7c_BFu9ll()
{
  {
    init_simple_test("Sf_BFu7c_BFu9ll");
    static STRUCT_IF_C Sf_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu9ll, Sf_BFu7c_BFu9ll)
//============================================================================


struct  Sf_BFu7c_BFu9s  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu7c_BFu9s) C1{ FC2{} Fc:7 Fs:9}



static void Test_Sf_BFu7c_BFu9s()
{
  {
    init_simple_test("Sf_BFu7c_BFu9s");
    static STRUCT_IF_C Sf_BFu7c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_BFu9s, Sf_BFu7c_BFu9s)
//============================================================================


struct  Sf_BFu7c_C  {
  struct empty v1;
  unsigned char v2:7;
  char v3;
};
//SIG(1 Sf_BFu7c_C) C1{ FC2{} Fc:7 Fc}



static void Test_Sf_BFu7c_C()
{
  {
    init_simple_test("Sf_BFu7c_C");
    static STRUCT_IF_C Sf_BFu7c_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_C");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_C");
    check_field_offset(lv, v3, 1, "Sf_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_C, Sf_BFu7c_C)
//============================================================================


struct  Sf_BFu7c_D  {
  struct empty v1;
  unsigned char v2:7;
  double v3;
};
//SIG(1 Sf_BFu7c_D) C1{ FC2{} Fc:7 FL}



static void Test_Sf_BFu7c_D()
{
  {
    init_simple_test("Sf_BFu7c_D");
    static STRUCT_IF_C Sf_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_D");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_D, Sf_BFu7c_D)
//============================================================================


struct  Sf_BFu7c_F  {
  struct empty v1;
  unsigned char v2:7;
  float v3;
};
//SIG(1 Sf_BFu7c_F) C1{ FC2{} Fc:7 Fi}



static void Test_Sf_BFu7c_F()
{
  {
    init_simple_test("Sf_BFu7c_F");
    static STRUCT_IF_C Sf_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_F");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_F, Sf_BFu7c_F)
//============================================================================


struct  Sf_BFu7c_I  {
  struct empty v1;
  unsigned char v2:7;
  int v3;
};
//SIG(1 Sf_BFu7c_I) C1{ FC2{} Fc:7 Fi}



static void Test_Sf_BFu7c_I()
{
  {
    init_simple_test("Sf_BFu7c_I");
    static STRUCT_IF_C Sf_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_I");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_I, Sf_BFu7c_I)
//============================================================================


struct  Sf_BFu7c_Ip  {
  struct empty v1;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 Sf_BFu7c_Ip) C1{ FC2{} Fc:7 Fp}



static void Test_Sf_BFu7c_Ip()
{
  {
    init_simple_test("Sf_BFu7c_Ip");
    static STRUCT_IF_C Sf_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Ip");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Ip, Sf_BFu7c_Ip)
//============================================================================


struct  Sf_BFu7c_L  {
  struct empty v1;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 Sf_BFu7c_L) C1{ FC2{} Fc:7 FL}



static void Test_Sf_BFu7c_L()
{
  {
    init_simple_test("Sf_BFu7c_L");
    static STRUCT_IF_C Sf_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_L");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_L, Sf_BFu7c_L)
//============================================================================


struct  Sf_BFu7c_S  {
  struct empty v1;
  unsigned char v2:7;
  short v3;
};
//SIG(1 Sf_BFu7c_S) C1{ FC2{} Fc:7 Fs}



static void Test_Sf_BFu7c_S()
{
  {
    init_simple_test("Sf_BFu7c_S");
    static STRUCT_IF_C Sf_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_S");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_S, Sf_BFu7c_S)
//============================================================================


struct  Sf_BFu7c_Sf  {
  struct empty v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Sf_BFu7c_Sf) C1{ FC2{} Fc:7 FC2}



static void Test_Sf_BFu7c_Sf()
{
  {
    init_simple_test("Sf_BFu7c_Sf");
    static STRUCT_IF_C Sf_BFu7c_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu7c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Sf");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Sf, Sf_BFu7c_Sf)
//============================================================================


struct  Sf_BFu7c_Uc  {
  struct empty v1;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 Sf_BFu7c_Uc) C1{ FC2{} Fc:7 Fc}



static void Test_Sf_BFu7c_Uc()
{
  {
    init_simple_test("Sf_BFu7c_Uc");
    static STRUCT_IF_C Sf_BFu7c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu7c_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Uc");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Uc, Sf_BFu7c_Uc)
//============================================================================


struct  Sf_BFu7c_Ui  {
  struct empty v1;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 Sf_BFu7c_Ui) C1{ FC2{} Fc:7 Fi}



static void Test_Sf_BFu7c_Ui()
{
  {
    init_simple_test("Sf_BFu7c_Ui");
    static STRUCT_IF_C Sf_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7c_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Ui");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Ui, Sf_BFu7c_Ui)
//============================================================================


struct  Sf_BFu7c_Ul  {
  struct empty v1;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 Sf_BFu7c_Ul) C1{ FC2{} Fc:7 FL}



static void Test_Sf_BFu7c_Ul()
{
  {
    init_simple_test("Sf_BFu7c_Ul");
    static STRUCT_IF_C Sf_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Ul");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Ul, Sf_BFu7c_Ul)
//============================================================================


struct  Sf_BFu7c_Us  {
  struct empty v1;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 Sf_BFu7c_Us) C1{ FC2{} Fc:7 Fs}



static void Test_Sf_BFu7c_Us()
{
  {
    init_simple_test("Sf_BFu7c_Us");
    static STRUCT_IF_C Sf_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7c_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Us");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Us, Sf_BFu7c_Us)
//============================================================================


struct  Sf_BFu7c_Vp  {
  struct empty v1;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 Sf_BFu7c_Vp) C1{ FC2{} Fc:7 Fp}



static void Test_Sf_BFu7c_Vp()
{
  {
    init_simple_test("Sf_BFu7c_Vp");
    static STRUCT_IF_C Sf_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7c_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu7c_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7c_Vp");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7c_Vp, Sf_BFu7c_Vp)
//============================================================================


struct  Sf_BFu7i  {
  struct empty v1;
  unsigned int v2:7;
};
//SIG(1 Sf_BFu7i) C1{ FC2{} Fi:7}



static void Test_Sf_BFu7i()
{
  {
    init_simple_test("Sf_BFu7i");
    static STRUCT_IF_C Sf_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i, Sf_BFu7i)
//============================================================================


struct  Sf_BFu7i_BFu15i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu7i_BFu15i) C1{ FC2{} Fi:7 Fi:15}



static void Test_Sf_BFu7i_BFu15i()
{
  {
    init_simple_test("Sf_BFu7i_BFu15i");
    static STRUCT_IF_C Sf_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu15i, Sf_BFu7i_BFu15i)
//============================================================================


struct  Sf_BFu7i_BFu15ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu7i_BFu15ll) C1{ FC2{} Fi:7 FL:15}



static void Test_Sf_BFu7i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu15ll");
    static STRUCT_IF_C Sf_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu15ll, Sf_BFu7i_BFu15ll)
//============================================================================


struct  Sf_BFu7i_BFu15s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu7i_BFu15s) C1{ FC2{} Fi:7 Fs:15}



static void Test_Sf_BFu7i_BFu15s()
{
  {
    init_simple_test("Sf_BFu7i_BFu15s");
    static STRUCT_IF_C Sf_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu15s, Sf_BFu7i_BFu15s)
//============================================================================


struct  Sf_BFu7i_BFu16i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu7i_BFu16i) C1{ FC2{} Fi:7 Fi:16}



static void Test_Sf_BFu7i_BFu16i()
{
  {
    init_simple_test("Sf_BFu7i_BFu16i");
    static STRUCT_IF_C Sf_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu16i, Sf_BFu7i_BFu16i)
//============================================================================


struct  Sf_BFu7i_BFu16ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu7i_BFu16ll) C1{ FC2{} Fi:7 FL:16}



static void Test_Sf_BFu7i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu16ll");
    static STRUCT_IF_C Sf_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu16ll, Sf_BFu7i_BFu16ll)
//============================================================================


struct  Sf_BFu7i_BFu16s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu7i_BFu16s) C1{ FC2{} Fi:7 Fs:16}



static void Test_Sf_BFu7i_BFu16s()
{
  {
    init_simple_test("Sf_BFu7i_BFu16s");
    static STRUCT_IF_C Sf_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu16s, Sf_BFu7i_BFu16s)
//============================================================================


struct  Sf_BFu7i_BFu17i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu7i_BFu17i) C1{ FC2{} Fi:7 Fi:17}



static void Test_Sf_BFu7i_BFu17i()
{
  {
    init_simple_test("Sf_BFu7i_BFu17i");
    static STRUCT_IF_C Sf_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu17i, Sf_BFu7i_BFu17i)
//============================================================================


struct  Sf_BFu7i_BFu17ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu7i_BFu17ll) C1{ FC2{} Fi:7 FL:17}



static void Test_Sf_BFu7i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu17ll");
    static STRUCT_IF_C Sf_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu17ll, Sf_BFu7i_BFu17ll)
//============================================================================


struct  Sf_BFu7i_BFu1c  {
  struct empty v1;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu7i_BFu1c) C1{ FC2{} Fi:7 Fc:1}



static void Test_Sf_BFu7i_BFu1c()
{
  {
    init_simple_test("Sf_BFu7i_BFu1c");
    static STRUCT_IF_C Sf_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu1c, Sf_BFu7i_BFu1c)
//============================================================================


struct  Sf_BFu7i_BFu1i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu7i_BFu1i) C1{ FC2{} Fi:7 Fi:1}



static void Test_Sf_BFu7i_BFu1i()
{
  {
    init_simple_test("Sf_BFu7i_BFu1i");
    static STRUCT_IF_C Sf_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu1i, Sf_BFu7i_BFu1i)
//============================================================================


struct  Sf_BFu7i_BFu1ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu7i_BFu1ll) C1{ FC2{} Fi:7 FL:1}



static void Test_Sf_BFu7i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu1ll");
    static STRUCT_IF_C Sf_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu1ll, Sf_BFu7i_BFu1ll)
//============================================================================


struct  Sf_BFu7i_BFu1s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu7i_BFu1s) C1{ FC2{} Fi:7 Fs:1}



static void Test_Sf_BFu7i_BFu1s()
{
  {
    init_simple_test("Sf_BFu7i_BFu1s");
    static STRUCT_IF_C Sf_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu1s, Sf_BFu7i_BFu1s)
//============================================================================


struct  Sf_BFu7i_BFu31i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu7i_BFu31i) C1{ FC2{} Fi:7 Fi:31}



static void Test_Sf_BFu7i_BFu31i()
{
  {
    init_simple_test("Sf_BFu7i_BFu31i");
    static STRUCT_IF_C Sf_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu31i, Sf_BFu7i_BFu31i)
//============================================================================


struct  Sf_BFu7i_BFu31ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu7i_BFu31ll) C1{ FC2{} Fi:7 FL:31}



static void Test_Sf_BFu7i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu31ll");
    static STRUCT_IF_C Sf_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, 1, "Sf_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, hide_ull(1LL<<30), "Sf_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu31ll, Sf_BFu7i_BFu31ll)
//============================================================================


struct  Sf_BFu7i_BFu32i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu7i_BFu32i) C1{ FC2{} Fi:7 Fi:32}



static void Test_Sf_BFu7i_BFu32i()
{
  {
    init_simple_test("Sf_BFu7i_BFu32i");
    static STRUCT_IF_C Sf_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu32i, Sf_BFu7i_BFu32i)
//============================================================================


struct  Sf_BFu7i_BFu32ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu7i_BFu32ll) C1{ FC2{} Fi:7 FL:32}



static void Test_Sf_BFu7i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu32ll");
    static STRUCT_IF_C Sf_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, 1, "Sf_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, hide_ull(1LL<<31), "Sf_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu32ll, Sf_BFu7i_BFu32ll)
//============================================================================


struct  Sf_BFu7i_BFu33  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu7i_BFu33) C1{ FC2{} Fi:7 FL:33}



static void Test_Sf_BFu7i_BFu33()
{
  {
    init_simple_test("Sf_BFu7i_BFu33");
    static STRUCT_IF_C Sf_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, 1, "Sf_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, hide_ull(1LL<<32), "Sf_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu33, Sf_BFu7i_BFu33)
//============================================================================


struct  Sf_BFu7i_BFu7c  {
  struct empty v1;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu7i_BFu7c) C1{ FC2{} Fi:7 Fc:7}



static void Test_Sf_BFu7i_BFu7c()
{
  {
    init_simple_test("Sf_BFu7i_BFu7c");
    static STRUCT_IF_C Sf_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu7c, Sf_BFu7i_BFu7c)
//============================================================================


struct  Sf_BFu7i_BFu7i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu7i_BFu7i) C1{ FC2{} Fi:7 Fi:7}



static void Test_Sf_BFu7i_BFu7i()
{
  {
    init_simple_test("Sf_BFu7i_BFu7i");
    static STRUCT_IF_C Sf_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu7i, Sf_BFu7i_BFu7i)
//============================================================================


struct  Sf_BFu7i_BFu7ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu7i_BFu7ll) C1{ FC2{} Fi:7 FL:7}



static void Test_Sf_BFu7i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu7ll");
    static STRUCT_IF_C Sf_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu7ll, Sf_BFu7i_BFu7ll)
//============================================================================


struct  Sf_BFu7i_BFu7s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu7i_BFu7s) C1{ FC2{} Fi:7 Fs:7}



static void Test_Sf_BFu7i_BFu7s()
{
  {
    init_simple_test("Sf_BFu7i_BFu7s");
    static STRUCT_IF_C Sf_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu7s, Sf_BFu7i_BFu7s)
//============================================================================


struct  Sf_BFu7i_BFu8c  {
  struct empty v1;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu7i_BFu8c) C1{ FC2{} Fi:7 Fc:8}



static void Test_Sf_BFu7i_BFu8c()
{
  {
    init_simple_test("Sf_BFu7i_BFu8c");
    static STRUCT_IF_C Sf_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu8c, Sf_BFu7i_BFu8c)
//============================================================================


struct  Sf_BFu7i_BFu8i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu7i_BFu8i) C1{ FC2{} Fi:7 Fi:8}



static void Test_Sf_BFu7i_BFu8i()
{
  {
    init_simple_test("Sf_BFu7i_BFu8i");
    static STRUCT_IF_C Sf_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu8i, Sf_BFu7i_BFu8i)
//============================================================================


struct  Sf_BFu7i_BFu8ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu7i_BFu8ll) C1{ FC2{} Fi:7 FL:8}



static void Test_Sf_BFu7i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu8ll");
    static STRUCT_IF_C Sf_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu8ll, Sf_BFu7i_BFu8ll)
//============================================================================


struct  Sf_BFu7i_BFu8s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu7i_BFu8s) C1{ FC2{} Fi:7 Fs:8}



static void Test_Sf_BFu7i_BFu8s()
{
  {
    init_simple_test("Sf_BFu7i_BFu8s");
    static STRUCT_IF_C Sf_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu8s, Sf_BFu7i_BFu8s)
//============================================================================


struct  Sf_BFu7i_BFu9i  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu7i_BFu9i) C1{ FC2{} Fi:7 Fi:9}



static void Test_Sf_BFu7i_BFu9i()
{
  {
    init_simple_test("Sf_BFu7i_BFu9i");
    static STRUCT_IF_C Sf_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu9i, Sf_BFu7i_BFu9i)
//============================================================================


struct  Sf_BFu7i_BFu9ll  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu7i_BFu9ll) C1{ FC2{} Fi:7 FL:9}



static void Test_Sf_BFu7i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu7i_BFu9ll");
    static STRUCT_IF_C Sf_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu9ll, Sf_BFu7i_BFu9ll)
//============================================================================


struct  Sf_BFu7i_BFu9s  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu7i_BFu9s) C1{ FC2{} Fi:7 Fs:9}



static void Test_Sf_BFu7i_BFu9s()
{
  {
    init_simple_test("Sf_BFu7i_BFu9s");
    static STRUCT_IF_C Sf_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_BFu9s, Sf_BFu7i_BFu9s)
//============================================================================


struct  Sf_BFu7i_C  {
  struct empty v1;
  unsigned int v2:7;
  char v3;
};
//SIG(1 Sf_BFu7i_C) C1{ FC2{} Fi:7 Fc}



static void Test_Sf_BFu7i_C()
{
  {
    init_simple_test("Sf_BFu7i_C");
    static STRUCT_IF_C Sf_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_C");
    check_field_offset(lv, v3, 1, "Sf_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_C, Sf_BFu7i_C)
//============================================================================


struct  Sf_BFu7i_D  {
  struct empty v1;
  unsigned int v2:7;
  double v3;
};
//SIG(1 Sf_BFu7i_D) C1{ FC2{} Fi:7 FL}



static void Test_Sf_BFu7i_D()
{
  {
    init_simple_test("Sf_BFu7i_D");
    static STRUCT_IF_C Sf_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_D, Sf_BFu7i_D)
//============================================================================


struct  Sf_BFu7i_F  {
  struct empty v1;
  unsigned int v2:7;
  float v3;
};
//SIG(1 Sf_BFu7i_F) C1{ FC2{} Fi:7 Fi}



static void Test_Sf_BFu7i_F()
{
  {
    init_simple_test("Sf_BFu7i_F");
    static STRUCT_IF_C Sf_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_F, Sf_BFu7i_F)
//============================================================================


struct  Sf_BFu7i_I  {
  struct empty v1;
  unsigned int v2:7;
  int v3;
};
//SIG(1 Sf_BFu7i_I) C1{ FC2{} Fi:7 Fi}



static void Test_Sf_BFu7i_I()
{
  {
    init_simple_test("Sf_BFu7i_I");
    static STRUCT_IF_C Sf_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_I, Sf_BFu7i_I)
//============================================================================


struct  Sf_BFu7i_Ip  {
  struct empty v1;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 Sf_BFu7i_Ip) C1{ FC2{} Fi:7 Fp}



static void Test_Sf_BFu7i_Ip()
{
  {
    init_simple_test("Sf_BFu7i_Ip");
    static STRUCT_IF_C Sf_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Ip, Sf_BFu7i_Ip)
//============================================================================


struct  Sf_BFu7i_L  {
  struct empty v1;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 Sf_BFu7i_L) C1{ FC2{} Fi:7 FL}



static void Test_Sf_BFu7i_L()
{
  {
    init_simple_test("Sf_BFu7i_L");
    static STRUCT_IF_C Sf_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_L, Sf_BFu7i_L)
//============================================================================


struct  Sf_BFu7i_S  {
  struct empty v1;
  unsigned int v2:7;
  short v3;
};
//SIG(1 Sf_BFu7i_S) C1{ FC2{} Fi:7 Fs}



static void Test_Sf_BFu7i_S()
{
  {
    init_simple_test("Sf_BFu7i_S");
    static STRUCT_IF_C Sf_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_S, Sf_BFu7i_S)
//============================================================================


struct  Sf_BFu7i_Sf  {
  struct empty v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Sf_BFu7i_Sf) C1{ FC2{} Fi:7 FC2}



static void Test_Sf_BFu7i_Sf()
{
  {
    init_simple_test("Sf_BFu7i_Sf");
    static STRUCT_IF_C Sf_BFu7i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Sf, Sf_BFu7i_Sf)
//============================================================================


struct  Sf_BFu7i_Uc  {
  struct empty v1;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 Sf_BFu7i_Uc) C1{ FC2{} Fi:7 Fc}



static void Test_Sf_BFu7i_Uc()
{
  {
    init_simple_test("Sf_BFu7i_Uc");
    static STRUCT_IF_C Sf_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Uc, Sf_BFu7i_Uc)
//============================================================================


struct  Sf_BFu7i_Ui  {
  struct empty v1;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 Sf_BFu7i_Ui) C1{ FC2{} Fi:7 Fi}



static void Test_Sf_BFu7i_Ui()
{
  {
    init_simple_test("Sf_BFu7i_Ui");
    static STRUCT_IF_C Sf_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Ui, Sf_BFu7i_Ui)
//============================================================================


struct  Sf_BFu7i_Ul  {
  struct empty v1;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 Sf_BFu7i_Ul) C1{ FC2{} Fi:7 FL}



static void Test_Sf_BFu7i_Ul()
{
  {
    init_simple_test("Sf_BFu7i_Ul");
    static STRUCT_IF_C Sf_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Ul, Sf_BFu7i_Ul)
//============================================================================


struct  Sf_BFu7i_Us  {
  struct empty v1;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 Sf_BFu7i_Us) C1{ FC2{} Fi:7 Fs}



static void Test_Sf_BFu7i_Us()
{
  {
    init_simple_test("Sf_BFu7i_Us");
    static STRUCT_IF_C Sf_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Us, Sf_BFu7i_Us)
//============================================================================


struct  Sf_BFu7i_Vp  {
  struct empty v1;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 Sf_BFu7i_Vp) C1{ FC2{} Fi:7 Fp}



static void Test_Sf_BFu7i_Vp()
{
  {
    init_simple_test("Sf_BFu7i_Vp");
    static STRUCT_IF_C Sf_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu7i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7i_Vp, Sf_BFu7i_Vp)
//============================================================================


struct  Sf_BFu7ll  {
  struct empty v1;
  __tsu64 v2:7;
};
//SIG(1 Sf_BFu7ll) C1{ FC2{} FL:7}



static void Test_Sf_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7ll");
    static STRUCT_IF_C Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll, Sf_BFu7ll)
//============================================================================


struct  Sf_BFu7ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu7ll_BFu15i) C1{ FC2{} FL:7 Fi:15}



static void Test_Sf_BFu7ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu15i");
    static STRUCT_IF_C Sf_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu15i, Sf_BFu7ll_BFu15i)
//============================================================================


struct  Sf_BFu7ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu7ll_BFu15ll) C1{ FC2{} FL:7 FL:15}



static void Test_Sf_BFu7ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu15ll, Sf_BFu7ll_BFu15ll)
//============================================================================


struct  Sf_BFu7ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu7ll_BFu15s) C1{ FC2{} FL:7 Fs:15}



static void Test_Sf_BFu7ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu15s");
    static STRUCT_IF_C Sf_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu15s, Sf_BFu7ll_BFu15s)
//============================================================================


struct  Sf_BFu7ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu7ll_BFu16i) C1{ FC2{} FL:7 Fi:16}



static void Test_Sf_BFu7ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu16i");
    static STRUCT_IF_C Sf_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu16i, Sf_BFu7ll_BFu16i)
//============================================================================


struct  Sf_BFu7ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu7ll_BFu16ll) C1{ FC2{} FL:7 FL:16}



static void Test_Sf_BFu7ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu16ll, Sf_BFu7ll_BFu16ll)
//============================================================================


struct  Sf_BFu7ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu7ll_BFu16s) C1{ FC2{} FL:7 Fs:16}



static void Test_Sf_BFu7ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu16s");
    static STRUCT_IF_C Sf_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu16s, Sf_BFu7ll_BFu16s)
//============================================================================


struct  Sf_BFu7ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu7ll_BFu17i) C1{ FC2{} FL:7 Fi:17}



static void Test_Sf_BFu7ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu17i");
    static STRUCT_IF_C Sf_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu17i, Sf_BFu7ll_BFu17i)
//============================================================================


struct  Sf_BFu7ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu7ll_BFu17ll) C1{ FC2{} FL:7 FL:17}



static void Test_Sf_BFu7ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu17ll, Sf_BFu7ll_BFu17ll)
//============================================================================


struct  Sf_BFu7ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu7ll_BFu1c) C1{ FC2{} FL:7 Fc:1}



static void Test_Sf_BFu7ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu7ll_BFu1c");
    static STRUCT_IF_C Sf_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu1c, Sf_BFu7ll_BFu1c)
//============================================================================


struct  Sf_BFu7ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu7ll_BFu1i) C1{ FC2{} FL:7 Fi:1}



static void Test_Sf_BFu7ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu1i");
    static STRUCT_IF_C Sf_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu1i, Sf_BFu7ll_BFu1i)
//============================================================================


struct  Sf_BFu7ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu7ll_BFu1ll) C1{ FC2{} FL:7 FL:1}



static void Test_Sf_BFu7ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu1ll, Sf_BFu7ll_BFu1ll)
//============================================================================


struct  Sf_BFu7ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu7ll_BFu1s) C1{ FC2{} FL:7 Fs:1}



static void Test_Sf_BFu7ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu1s");
    static STRUCT_IF_C Sf_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu1s, Sf_BFu7ll_BFu1s)
//============================================================================


struct  Sf_BFu7ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu7ll_BFu31i) C1{ FC2{} FL:7 Fi:31}



static void Test_Sf_BFu7ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu31i");
    static STRUCT_IF_C Sf_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu31i, Sf_BFu7ll_BFu31i)
//============================================================================


struct  Sf_BFu7ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu7ll_BFu31ll) C1{ FC2{} FL:7 FL:31}



static void Test_Sf_BFu7ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, 1, "Sf_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, hide_ull(1LL<<30), "Sf_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu31ll, Sf_BFu7ll_BFu31ll)
//============================================================================


struct  Sf_BFu7ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu7ll_BFu32i) C1{ FC2{} FL:7 Fi:32}



static void Test_Sf_BFu7ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu32i");
    static STRUCT_IF_C Sf_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu32i, Sf_BFu7ll_BFu32i)
//============================================================================


struct  Sf_BFu7ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu7ll_BFu32ll) C1{ FC2{} FL:7 FL:32}



static void Test_Sf_BFu7ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, 1, "Sf_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, hide_ull(1LL<<31), "Sf_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu32ll, Sf_BFu7ll_BFu32ll)
//============================================================================


struct  Sf_BFu7ll_BFu33  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu7ll_BFu33) C1{ FC2{} FL:7 FL:33}



static void Test_Sf_BFu7ll_BFu33()
{
  {
    init_simple_test("Sf_BFu7ll_BFu33");
    static STRUCT_IF_C Sf_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, 1, "Sf_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, hide_ull(1LL<<32), "Sf_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu33, Sf_BFu7ll_BFu33)
//============================================================================


struct  Sf_BFu7ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu7ll_BFu7c) C1{ FC2{} FL:7 Fc:7}



static void Test_Sf_BFu7ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu7ll_BFu7c");
    static STRUCT_IF_C Sf_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu7c, Sf_BFu7ll_BFu7c)
//============================================================================


struct  Sf_BFu7ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu7ll_BFu7i) C1{ FC2{} FL:7 Fi:7}



static void Test_Sf_BFu7ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu7i");
    static STRUCT_IF_C Sf_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu7i, Sf_BFu7ll_BFu7i)
//============================================================================


struct  Sf_BFu7ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu7ll_BFu7ll) C1{ FC2{} FL:7 FL:7}



static void Test_Sf_BFu7ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu7ll, Sf_BFu7ll_BFu7ll)
//============================================================================


struct  Sf_BFu7ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu7ll_BFu7s) C1{ FC2{} FL:7 Fs:7}



static void Test_Sf_BFu7ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu7s");
    static STRUCT_IF_C Sf_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu7s, Sf_BFu7ll_BFu7s)
//============================================================================


struct  Sf_BFu7ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu7ll_BFu8c) C1{ FC2{} FL:7 Fc:8}



static void Test_Sf_BFu7ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu7ll_BFu8c");
    static STRUCT_IF_C Sf_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu8c, Sf_BFu7ll_BFu8c)
//============================================================================


struct  Sf_BFu7ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu7ll_BFu8i) C1{ FC2{} FL:7 Fi:8}



static void Test_Sf_BFu7ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu8i");
    static STRUCT_IF_C Sf_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu8i, Sf_BFu7ll_BFu8i)
//============================================================================


struct  Sf_BFu7ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu7ll_BFu8ll) C1{ FC2{} FL:7 FL:8}



static void Test_Sf_BFu7ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu8ll, Sf_BFu7ll_BFu8ll)
//============================================================================


struct  Sf_BFu7ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu7ll_BFu8s) C1{ FC2{} FL:7 Fs:8}



static void Test_Sf_BFu7ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu8s");
    static STRUCT_IF_C Sf_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu8s, Sf_BFu7ll_BFu8s)
//============================================================================


struct  Sf_BFu7ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu7ll_BFu9i) C1{ FC2{} FL:7 Fi:9}



static void Test_Sf_BFu7ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu7ll_BFu9i");
    static STRUCT_IF_C Sf_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu9i, Sf_BFu7ll_BFu9i)
//============================================================================


struct  Sf_BFu7ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu7ll_BFu9ll) C1{ FC2{} FL:7 FL:9}



static void Test_Sf_BFu7ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu7ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu9ll, Sf_BFu7ll_BFu9ll)
//============================================================================


struct  Sf_BFu7ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu7ll_BFu9s) C1{ FC2{} FL:7 Fs:9}



static void Test_Sf_BFu7ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu7ll_BFu9s");
    static STRUCT_IF_C Sf_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_BFu9s, Sf_BFu7ll_BFu9s)
//============================================================================


struct  Sf_BFu7ll_C  {
  struct empty v1;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 Sf_BFu7ll_C) C1{ FC2{} FL:7 Fc}



static void Test_Sf_BFu7ll_C()
{
  {
    init_simple_test("Sf_BFu7ll_C");
    static STRUCT_IF_C Sf_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_C");
    check_field_offset(lv, v3, 1, "Sf_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_C, Sf_BFu7ll_C)
//============================================================================


struct  Sf_BFu7ll_D  {
  struct empty v1;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 Sf_BFu7ll_D) C1{ FC2{} FL:7 FL}



static void Test_Sf_BFu7ll_D()
{
  {
    init_simple_test("Sf_BFu7ll_D");
    static STRUCT_IF_C Sf_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_D, Sf_BFu7ll_D)
//============================================================================


struct  Sf_BFu7ll_F  {
  struct empty v1;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 Sf_BFu7ll_F) C1{ FC2{} FL:7 Fi}



static void Test_Sf_BFu7ll_F()
{
  {
    init_simple_test("Sf_BFu7ll_F");
    static STRUCT_IF_C Sf_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_F, Sf_BFu7ll_F)
//============================================================================


struct  Sf_BFu7ll_I  {
  struct empty v1;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 Sf_BFu7ll_I) C1{ FC2{} FL:7 Fi}



static void Test_Sf_BFu7ll_I()
{
  {
    init_simple_test("Sf_BFu7ll_I");
    static STRUCT_IF_C Sf_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_I, Sf_BFu7ll_I)
//============================================================================


struct  Sf_BFu7ll_Ip  {
  struct empty v1;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 Sf_BFu7ll_Ip) C1{ FC2{} FL:7 Fp}



static void Test_Sf_BFu7ll_Ip()
{
  {
    init_simple_test("Sf_BFu7ll_Ip");
    static STRUCT_IF_C Sf_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Ip, Sf_BFu7ll_Ip)
//============================================================================


struct  Sf_BFu7ll_L  {
  struct empty v1;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 Sf_BFu7ll_L) C1{ FC2{} FL:7 FL}



static void Test_Sf_BFu7ll_L()
{
  {
    init_simple_test("Sf_BFu7ll_L");
    static STRUCT_IF_C Sf_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_L, Sf_BFu7ll_L)
//============================================================================


struct  Sf_BFu7ll_S  {
  struct empty v1;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 Sf_BFu7ll_S) C1{ FC2{} FL:7 Fs}



static void Test_Sf_BFu7ll_S()
{
  {
    init_simple_test("Sf_BFu7ll_S");
    static STRUCT_IF_C Sf_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_S, Sf_BFu7ll_S)
//============================================================================


struct  Sf_BFu7ll_Sf  {
  struct empty v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Sf_BFu7ll_Sf) C1{ FC2{} FL:7 FC2}



static void Test_Sf_BFu7ll_Sf()
{
  {
    init_simple_test("Sf_BFu7ll_Sf");
    static STRUCT_IF_C Sf_BFu7ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Sf, Sf_BFu7ll_Sf)
//============================================================================


struct  Sf_BFu7ll_Uc  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 Sf_BFu7ll_Uc) C1{ FC2{} FL:7 Fc}



static void Test_Sf_BFu7ll_Uc()
{
  {
    init_simple_test("Sf_BFu7ll_Uc");
    static STRUCT_IF_C Sf_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Uc, Sf_BFu7ll_Uc)
//============================================================================


struct  Sf_BFu7ll_Ui  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 Sf_BFu7ll_Ui) C1{ FC2{} FL:7 Fi}



static void Test_Sf_BFu7ll_Ui()
{
  {
    init_simple_test("Sf_BFu7ll_Ui");
    static STRUCT_IF_C Sf_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Ui, Sf_BFu7ll_Ui)
//============================================================================


struct  Sf_BFu7ll_Ul  {
  struct empty v1;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 Sf_BFu7ll_Ul) C1{ FC2{} FL:7 FL}



static void Test_Sf_BFu7ll_Ul()
{
  {
    init_simple_test("Sf_BFu7ll_Ul");
    static STRUCT_IF_C Sf_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Ul, Sf_BFu7ll_Ul)
//============================================================================


struct  Sf_BFu7ll_Us  {
  struct empty v1;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 Sf_BFu7ll_Us) C1{ FC2{} FL:7 Fs}



static void Test_Sf_BFu7ll_Us()
{
  {
    init_simple_test("Sf_BFu7ll_Us");
    static STRUCT_IF_C Sf_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Us, Sf_BFu7ll_Us)
//============================================================================


struct  Sf_BFu7ll_Vp  {
  struct empty v1;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 Sf_BFu7ll_Vp) C1{ FC2{} FL:7 Fp}



static void Test_Sf_BFu7ll_Vp()
{
  {
    init_simple_test("Sf_BFu7ll_Vp");
    static STRUCT_IF_C Sf_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu7ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7ll_Vp, Sf_BFu7ll_Vp)
//============================================================================


struct  Sf_BFu7s  {
  struct empty v1;
  unsigned short v2:7;
};
//SIG(1 Sf_BFu7s) C1{ FC2{} Fs:7}



static void Test_Sf_BFu7s()
{
  {
    init_simple_test("Sf_BFu7s");
    static STRUCT_IF_C Sf_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s, Sf_BFu7s)
//============================================================================


struct  Sf_BFu7s_BFu15i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu7s_BFu15i) C1{ FC2{} Fs:7 Fi:15}



static void Test_Sf_BFu7s_BFu15i()
{
  {
    init_simple_test("Sf_BFu7s_BFu15i");
    static STRUCT_IF_C Sf_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu15i, Sf_BFu7s_BFu15i)
//============================================================================


struct  Sf_BFu7s_BFu15ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu7s_BFu15ll) C1{ FC2{} Fs:7 FL:15}



static void Test_Sf_BFu7s_BFu15ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu15ll");
    static STRUCT_IF_C Sf_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, 1, "Sf_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 0, 7, 15, hide_ull(1LL<<14), "Sf_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu15ll, Sf_BFu7s_BFu15ll)
//============================================================================


struct  Sf_BFu7s_BFu15s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu7s_BFu15s) C1{ FC2{} Fs:7 Fs:15}



static void Test_Sf_BFu7s_BFu15s()
{
  {
    init_simple_test("Sf_BFu7s_BFu15s");
    static STRUCT_IF_C Sf_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu15s, Sf_BFu7s_BFu15s)
//============================================================================


struct  Sf_BFu7s_BFu16i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu7s_BFu16i) C1{ FC2{} Fs:7 Fi:16}



static void Test_Sf_BFu7s_BFu16i()
{
  {
    init_simple_test("Sf_BFu7s_BFu16i");
    static STRUCT_IF_C Sf_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu16i, Sf_BFu7s_BFu16i)
//============================================================================


struct  Sf_BFu7s_BFu16ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu7s_BFu16ll) C1{ FC2{} Fs:7 FL:16}



static void Test_Sf_BFu7s_BFu16ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu16ll");
    static STRUCT_IF_C Sf_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, 1, "Sf_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 0, 7, 16, hide_ull(1LL<<15), "Sf_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu16ll, Sf_BFu7s_BFu16ll)
//============================================================================


struct  Sf_BFu7s_BFu16s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu7s_BFu16s) C1{ FC2{} Fs:7 Fs:16}



static void Test_Sf_BFu7s_BFu16s()
{
  {
    init_simple_test("Sf_BFu7s_BFu16s");
    static STRUCT_IF_C Sf_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu16s, Sf_BFu7s_BFu16s)
//============================================================================


struct  Sf_BFu7s_BFu17i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu7s_BFu17i) C1{ FC2{} Fs:7 Fi:17}



static void Test_Sf_BFu7s_BFu17i()
{
  {
    init_simple_test("Sf_BFu7s_BFu17i");
    static STRUCT_IF_C Sf_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu17i, Sf_BFu7s_BFu17i)
//============================================================================


struct  Sf_BFu7s_BFu17ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu7s_BFu17ll) C1{ FC2{} Fs:7 FL:17}



static void Test_Sf_BFu7s_BFu17ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu17ll");
    static STRUCT_IF_C Sf_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, 1, "Sf_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 0, 7, 17, hide_ull(1LL<<16), "Sf_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu17ll, Sf_BFu7s_BFu17ll)
//============================================================================


struct  Sf_BFu7s_BFu1c  {
  struct empty v1;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu7s_BFu1c) C1{ FC2{} Fs:7 Fc:1}



static void Test_Sf_BFu7s_BFu1c()
{
  {
    init_simple_test("Sf_BFu7s_BFu1c");
    static STRUCT_IF_C Sf_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu1c, Sf_BFu7s_BFu1c)
//============================================================================


struct  Sf_BFu7s_BFu1i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu7s_BFu1i) C1{ FC2{} Fs:7 Fi:1}



static void Test_Sf_BFu7s_BFu1i()
{
  {
    init_simple_test("Sf_BFu7s_BFu1i");
    static STRUCT_IF_C Sf_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu1i, Sf_BFu7s_BFu1i)
//============================================================================


struct  Sf_BFu7s_BFu1ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu7s_BFu1ll) C1{ FC2{} Fs:7 FL:1}



static void Test_Sf_BFu7s_BFu1ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu1ll");
    static STRUCT_IF_C Sf_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu1ll, Sf_BFu7s_BFu1ll)
//============================================================================


struct  Sf_BFu7s_BFu1s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu7s_BFu1s) C1{ FC2{} Fs:7 Fs:1}



static void Test_Sf_BFu7s_BFu1s()
{
  {
    init_simple_test("Sf_BFu7s_BFu1s");
    static STRUCT_IF_C Sf_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 0, 7, 1, 1, "Sf_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu1s, Sf_BFu7s_BFu1s)
//============================================================================


struct  Sf_BFu7s_BFu31i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu7s_BFu31i) C1{ FC2{} Fs:7 Fi:31}



static void Test_Sf_BFu7s_BFu31i()
{
  {
    init_simple_test("Sf_BFu7s_BFu31i");
    static STRUCT_IF_C Sf_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu31i, Sf_BFu7s_BFu31i)
//============================================================================


struct  Sf_BFu7s_BFu31ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu7s_BFu31ll) C1{ FC2{} Fs:7 FL:31}



static void Test_Sf_BFu7s_BFu31ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu31ll");
    static STRUCT_IF_C Sf_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, 1, "Sf_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 0, 7, 31, hide_ull(1LL<<30), "Sf_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu31ll, Sf_BFu7s_BFu31ll)
//============================================================================


struct  Sf_BFu7s_BFu32i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu7s_BFu32i) C1{ FC2{} Fs:7 Fi:32}



static void Test_Sf_BFu7s_BFu32i()
{
  {
    init_simple_test("Sf_BFu7s_BFu32i");
    static STRUCT_IF_C Sf_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu32i, Sf_BFu7s_BFu32i)
//============================================================================


struct  Sf_BFu7s_BFu32ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu7s_BFu32ll) C1{ FC2{} Fs:7 FL:32}



static void Test_Sf_BFu7s_BFu32ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu32ll");
    static STRUCT_IF_C Sf_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, 1, "Sf_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 0, 7, 32, hide_ull(1LL<<31), "Sf_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu32ll, Sf_BFu7s_BFu32ll)
//============================================================================


struct  Sf_BFu7s_BFu33  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu7s_BFu33) C1{ FC2{} Fs:7 FL:33}



static void Test_Sf_BFu7s_BFu33()
{
  {
    init_simple_test("Sf_BFu7s_BFu33");
    static STRUCT_IF_C Sf_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, 1, "Sf_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 0, 7, 33, hide_ull(1LL<<32), "Sf_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu33, Sf_BFu7s_BFu33)
//============================================================================


struct  Sf_BFu7s_BFu7c  {
  struct empty v1;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu7s_BFu7c) C1{ FC2{} Fs:7 Fc:7}



static void Test_Sf_BFu7s_BFu7c()
{
  {
    init_simple_test("Sf_BFu7s_BFu7c");
    static STRUCT_IF_C Sf_BFu7s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu7c, Sf_BFu7s_BFu7c)
//============================================================================


struct  Sf_BFu7s_BFu7i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu7s_BFu7i) C1{ FC2{} Fs:7 Fi:7}



static void Test_Sf_BFu7s_BFu7i()
{
  {
    init_simple_test("Sf_BFu7s_BFu7i");
    static STRUCT_IF_C Sf_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu7i, Sf_BFu7s_BFu7i)
//============================================================================


struct  Sf_BFu7s_BFu7ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu7s_BFu7ll) C1{ FC2{} Fs:7 FL:7}



static void Test_Sf_BFu7s_BFu7ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu7ll");
    static STRUCT_IF_C Sf_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu7ll, Sf_BFu7s_BFu7ll)
//============================================================================


struct  Sf_BFu7s_BFu7s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu7s_BFu7s) C1{ FC2{} Fs:7 Fs:7}



static void Test_Sf_BFu7s_BFu7s()
{
  {
    init_simple_test("Sf_BFu7s_BFu7s");
    static STRUCT_IF_C Sf_BFu7s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, 1, "Sf_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 0, 7, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu7s, Sf_BFu7s_BFu7s)
//============================================================================


struct  Sf_BFu7s_BFu8c  {
  struct empty v1;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu7s_BFu8c) C1{ FC2{} Fs:7 Fc:8}



static void Test_Sf_BFu7s_BFu8c()
{
  {
    init_simple_test("Sf_BFu7s_BFu8c");
    static STRUCT_IF_C Sf_BFu7s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu8c, Sf_BFu7s_BFu8c)
//============================================================================


struct  Sf_BFu7s_BFu8i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu7s_BFu8i) C1{ FC2{} Fs:7 Fi:8}



static void Test_Sf_BFu7s_BFu8i()
{
  {
    init_simple_test("Sf_BFu7s_BFu8i");
    static STRUCT_IF_C Sf_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu8i, Sf_BFu7s_BFu8i)
//============================================================================


struct  Sf_BFu7s_BFu8ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu7s_BFu8ll) C1{ FC2{} Fs:7 FL:8}



static void Test_Sf_BFu7s_BFu8ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu8ll");
    static STRUCT_IF_C Sf_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu8ll, Sf_BFu7s_BFu8ll)
//============================================================================


struct  Sf_BFu7s_BFu8s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu7s_BFu8s) C1{ FC2{} Fs:7 Fs:8}



static void Test_Sf_BFu7s_BFu8s()
{
  {
    init_simple_test("Sf_BFu7s_BFu8s");
    static STRUCT_IF_C Sf_BFu7s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, 1, "Sf_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 0, 7, 8, hide_ull(1LL<<7), "Sf_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu8s, Sf_BFu7s_BFu8s)
//============================================================================


struct  Sf_BFu7s_BFu9i  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu7s_BFu9i) C1{ FC2{} Fs:7 Fi:9}



static void Test_Sf_BFu7s_BFu9i()
{
  {
    init_simple_test("Sf_BFu7s_BFu9i");
    static STRUCT_IF_C Sf_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu9i, Sf_BFu7s_BFu9i)
//============================================================================


struct  Sf_BFu7s_BFu9ll  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu7s_BFu9ll) C1{ FC2{} Fs:7 FL:9}



static void Test_Sf_BFu7s_BFu9ll()
{
  {
    init_simple_test("Sf_BFu7s_BFu9ll");
    static STRUCT_IF_C Sf_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu9ll, Sf_BFu7s_BFu9ll)
//============================================================================


struct  Sf_BFu7s_BFu9s  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu7s_BFu9s) C1{ FC2{} Fs:7 Fs:9}



static void Test_Sf_BFu7s_BFu9s()
{
  {
    init_simple_test("Sf_BFu7s_BFu9s");
    static STRUCT_IF_C Sf_BFu7s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, 1, "Sf_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 0, 7, 9, hide_ull(1LL<<8), "Sf_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_BFu9s, Sf_BFu7s_BFu9s)
//============================================================================


struct  Sf_BFu7s_C  {
  struct empty v1;
  unsigned short v2:7;
  char v3;
};
//SIG(1 Sf_BFu7s_C) C1{ FC2{} Fs:7 Fc}



static void Test_Sf_BFu7s_C()
{
  {
    init_simple_test("Sf_BFu7s_C");
    static STRUCT_IF_C Sf_BFu7s_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_C");
    check_field_offset(lv, v3, 1, "Sf_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_C, Sf_BFu7s_C)
//============================================================================


struct  Sf_BFu7s_D  {
  struct empty v1;
  unsigned short v2:7;
  double v3;
};
//SIG(1 Sf_BFu7s_D) C1{ FC2{} Fs:7 FL}



static void Test_Sf_BFu7s_D()
{
  {
    init_simple_test("Sf_BFu7s_D");
    static STRUCT_IF_C Sf_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_D, Sf_BFu7s_D)
//============================================================================


struct  Sf_BFu7s_F  {
  struct empty v1;
  unsigned short v2:7;
  float v3;
};
//SIG(1 Sf_BFu7s_F) C1{ FC2{} Fs:7 Fi}



static void Test_Sf_BFu7s_F()
{
  {
    init_simple_test("Sf_BFu7s_F");
    static STRUCT_IF_C Sf_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_F, Sf_BFu7s_F)
//============================================================================


struct  Sf_BFu7s_I  {
  struct empty v1;
  unsigned short v2:7;
  int v3;
};
//SIG(1 Sf_BFu7s_I) C1{ FC2{} Fs:7 Fi}



static void Test_Sf_BFu7s_I()
{
  {
    init_simple_test("Sf_BFu7s_I");
    static STRUCT_IF_C Sf_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_I, Sf_BFu7s_I)
//============================================================================


struct  Sf_BFu7s_Ip  {
  struct empty v1;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 Sf_BFu7s_Ip) C1{ FC2{} Fs:7 Fp}



static void Test_Sf_BFu7s_Ip()
{
  {
    init_simple_test("Sf_BFu7s_Ip");
    static STRUCT_IF_C Sf_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Ip, Sf_BFu7s_Ip)
//============================================================================


struct  Sf_BFu7s_L  {
  struct empty v1;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 Sf_BFu7s_L) C1{ FC2{} Fs:7 FL}



static void Test_Sf_BFu7s_L()
{
  {
    init_simple_test("Sf_BFu7s_L");
    static STRUCT_IF_C Sf_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_L, Sf_BFu7s_L)
//============================================================================


struct  Sf_BFu7s_S  {
  struct empty v1;
  unsigned short v2:7;
  short v3;
};
//SIG(1 Sf_BFu7s_S) C1{ FC2{} Fs:7 Fs}



static void Test_Sf_BFu7s_S()
{
  {
    init_simple_test("Sf_BFu7s_S");
    static STRUCT_IF_C Sf_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_S, Sf_BFu7s_S)
//============================================================================


struct  Sf_BFu7s_Sf  {
  struct empty v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Sf_BFu7s_Sf) C1{ FC2{} Fs:7 FC2}



static void Test_Sf_BFu7s_Sf()
{
  {
    init_simple_test("Sf_BFu7s_Sf");
    static STRUCT_IF_C Sf_BFu7s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Sf");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Sf, Sf_BFu7s_Sf)
//============================================================================


struct  Sf_BFu7s_Uc  {
  struct empty v1;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 Sf_BFu7s_Uc) C1{ FC2{} Fs:7 Fc}



static void Test_Sf_BFu7s_Uc()
{
  {
    init_simple_test("Sf_BFu7s_Uc");
    static STRUCT_IF_C Sf_BFu7s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Uc, Sf_BFu7s_Uc)
//============================================================================


struct  Sf_BFu7s_Ui  {
  struct empty v1;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 Sf_BFu7s_Ui) C1{ FC2{} Fs:7 Fi}



static void Test_Sf_BFu7s_Ui()
{
  {
    init_simple_test("Sf_BFu7s_Ui");
    static STRUCT_IF_C Sf_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu7s_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Ui, Sf_BFu7s_Ui)
//============================================================================


struct  Sf_BFu7s_Ul  {
  struct empty v1;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 Sf_BFu7s_Ul) C1{ FC2{} Fs:7 FL}



static void Test_Sf_BFu7s_Ul()
{
  {
    init_simple_test("Sf_BFu7s_Ul");
    static STRUCT_IF_C Sf_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Ul, Sf_BFu7s_Ul)
//============================================================================


struct  Sf_BFu7s_Us  {
  struct empty v1;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 Sf_BFu7s_Us) C1{ FC2{} Fs:7 Fs}



static void Test_Sf_BFu7s_Us()
{
  {
    init_simple_test("Sf_BFu7s_Us");
    static STRUCT_IF_C Sf_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu7s_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Us, Sf_BFu7s_Us)
//============================================================================


struct  Sf_BFu7s_Vp  {
  struct empty v1;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 Sf_BFu7s_Vp) C1{ FC2{} Fs:7 Fp}



static void Test_Sf_BFu7s_Vp()
{
  {
    init_simple_test("Sf_BFu7s_Vp");
    static STRUCT_IF_C Sf_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu7s_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu7s_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 7, 1, "Sf_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 0, 7, hide_ull(1LL<<6), "Sf_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu7s_Vp, Sf_BFu7s_Vp)
//============================================================================


struct  Sf_BFu8c  {
  struct empty v1;
  unsigned char v2:8;
};
//SIG(1 Sf_BFu8c) C1{ FC2{} Fc:8}



static void Test_Sf_BFu8c()
{
  {
    init_simple_test("Sf_BFu8c");
    static STRUCT_IF_C Sf_BFu8c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c, Sf_BFu8c)
//============================================================================


struct  Sf_BFu8c_BFu15i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu8c_BFu15i) C1{ FC2{} Fc:8 Fi:15}



static void Test_Sf_BFu8c_BFu15i()
{
  {
    init_simple_test("Sf_BFu8c_BFu15i");
    static STRUCT_IF_C Sf_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu15i, Sf_BFu8c_BFu15i)
//============================================================================


struct  Sf_BFu8c_BFu15ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu8c_BFu15ll) C1{ FC2{} Fc:8 FL:15}



static void Test_Sf_BFu8c_BFu15ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu15ll");
    static STRUCT_IF_C Sf_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu15ll, Sf_BFu8c_BFu15ll)
//============================================================================


struct  Sf_BFu8c_BFu15s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu8c_BFu15s) C1{ FC2{} Fc:8 Fs:15}



static void Test_Sf_BFu8c_BFu15s()
{
  {
    init_simple_test("Sf_BFu8c_BFu15s");
    static STRUCT_IF_C Sf_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu15s, Sf_BFu8c_BFu15s)
//============================================================================


struct  Sf_BFu8c_BFu16i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu8c_BFu16i) C1{ FC2{} Fc:8 Fi:16}



static void Test_Sf_BFu8c_BFu16i()
{
  {
    init_simple_test("Sf_BFu8c_BFu16i");
    static STRUCT_IF_C Sf_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu16i, Sf_BFu8c_BFu16i)
//============================================================================


struct  Sf_BFu8c_BFu16ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu8c_BFu16ll) C1{ FC2{} Fc:8 FL:16}



static void Test_Sf_BFu8c_BFu16ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu16ll");
    static STRUCT_IF_C Sf_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu16ll, Sf_BFu8c_BFu16ll)
//============================================================================


struct  Sf_BFu8c_BFu16s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu8c_BFu16s) C1{ FC2{} Fc:8 Fs:16}



static void Test_Sf_BFu8c_BFu16s()
{
  {
    init_simple_test("Sf_BFu8c_BFu16s");
    static STRUCT_IF_C Sf_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu16s, Sf_BFu8c_BFu16s)
//============================================================================


struct  Sf_BFu8c_BFu17i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu8c_BFu17i) C1{ FC2{} Fc:8 Fi:17}



static void Test_Sf_BFu8c_BFu17i()
{
  {
    init_simple_test("Sf_BFu8c_BFu17i");
    static STRUCT_IF_C Sf_BFu8c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu17i, Sf_BFu8c_BFu17i)
//============================================================================


struct  Sf_BFu8c_BFu17ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu8c_BFu17ll) C1{ FC2{} Fc:8 FL:17}



static void Test_Sf_BFu8c_BFu17ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu17ll");
    static STRUCT_IF_C Sf_BFu8c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu17ll, Sf_BFu8c_BFu17ll)
//============================================================================


struct  Sf_BFu8c_BFu1c  {
  struct empty v1;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu8c_BFu1c) C1{ FC2{} Fc:8 Fc:1}



static void Test_Sf_BFu8c_BFu1c()
{
  {
    init_simple_test("Sf_BFu8c_BFu1c");
    static STRUCT_IF_C Sf_BFu8c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu1c, Sf_BFu8c_BFu1c)
//============================================================================


struct  Sf_BFu8c_BFu1i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu8c_BFu1i) C1{ FC2{} Fc:8 Fi:1}



static void Test_Sf_BFu8c_BFu1i()
{
  {
    init_simple_test("Sf_BFu8c_BFu1i");
    static STRUCT_IF_C Sf_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu1i, Sf_BFu8c_BFu1i)
//============================================================================


struct  Sf_BFu8c_BFu1ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu8c_BFu1ll) C1{ FC2{} Fc:8 FL:1}



static void Test_Sf_BFu8c_BFu1ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu1ll");
    static STRUCT_IF_C Sf_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu1ll, Sf_BFu8c_BFu1ll)
//============================================================================


struct  Sf_BFu8c_BFu1s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu8c_BFu1s) C1{ FC2{} Fc:8 Fs:1}



static void Test_Sf_BFu8c_BFu1s()
{
  {
    init_simple_test("Sf_BFu8c_BFu1s");
    static STRUCT_IF_C Sf_BFu8c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu1s, Sf_BFu8c_BFu1s)
//============================================================================


struct  Sf_BFu8c_BFu31i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu8c_BFu31i) C1{ FC2{} Fc:8 Fi:31}



static void Test_Sf_BFu8c_BFu31i()
{
  {
    init_simple_test("Sf_BFu8c_BFu31i");
    static STRUCT_IF_C Sf_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu31i, Sf_BFu8c_BFu31i)
//============================================================================


struct  Sf_BFu8c_BFu31ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu8c_BFu31ll) C1{ FC2{} Fc:8 FL:31}



static void Test_Sf_BFu8c_BFu31ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu31ll");
    static STRUCT_IF_C Sf_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu31ll, Sf_BFu8c_BFu31ll)
//============================================================================


struct  Sf_BFu8c_BFu32i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu8c_BFu32i) C1{ FC2{} Fc:8 Fi:32}



static void Test_Sf_BFu8c_BFu32i()
{
  {
    init_simple_test("Sf_BFu8c_BFu32i");
    static STRUCT_IF_C Sf_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu32i, Sf_BFu8c_BFu32i)
//============================================================================


struct  Sf_BFu8c_BFu32ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu8c_BFu32ll) C1{ FC2{} Fc:8 FL:32}



static void Test_Sf_BFu8c_BFu32ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu32ll");
    static STRUCT_IF_C Sf_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu32ll, Sf_BFu8c_BFu32ll)
//============================================================================


struct  Sf_BFu8c_BFu33  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu8c_BFu33) C1{ FC2{} Fc:8 FL:33}



static void Test_Sf_BFu8c_BFu33()
{
  {
    init_simple_test("Sf_BFu8c_BFu33");
    static STRUCT_IF_C Sf_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu33, Sf_BFu8c_BFu33)
//============================================================================


struct  Sf_BFu8c_BFu7c  {
  struct empty v1;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu8c_BFu7c) C1{ FC2{} Fc:8 Fc:7}



static void Test_Sf_BFu8c_BFu7c()
{
  {
    init_simple_test("Sf_BFu8c_BFu7c");
    static STRUCT_IF_C Sf_BFu8c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu7c, Sf_BFu8c_BFu7c)
//============================================================================


struct  Sf_BFu8c_BFu7i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu8c_BFu7i) C1{ FC2{} Fc:8 Fi:7}



static void Test_Sf_BFu8c_BFu7i()
{
  {
    init_simple_test("Sf_BFu8c_BFu7i");
    static STRUCT_IF_C Sf_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu7i, Sf_BFu8c_BFu7i)
//============================================================================


struct  Sf_BFu8c_BFu7ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu8c_BFu7ll) C1{ FC2{} Fc:8 FL:7}



static void Test_Sf_BFu8c_BFu7ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu7ll");
    static STRUCT_IF_C Sf_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu7ll, Sf_BFu8c_BFu7ll)
//============================================================================


struct  Sf_BFu8c_BFu7s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu8c_BFu7s) C1{ FC2{} Fc:8 Fs:7}



static void Test_Sf_BFu8c_BFu7s()
{
  {
    init_simple_test("Sf_BFu8c_BFu7s");
    static STRUCT_IF_C Sf_BFu8c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu7s, Sf_BFu8c_BFu7s)
//============================================================================


struct  Sf_BFu8c_BFu8c  {
  struct empty v1;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu8c_BFu8c) C1{ FC2{} Fc:8 Fc:8}



static void Test_Sf_BFu8c_BFu8c()
{
  {
    init_simple_test("Sf_BFu8c_BFu8c");
    static STRUCT_IF_C Sf_BFu8c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu8c, Sf_BFu8c_BFu8c)
//============================================================================


struct  Sf_BFu8c_BFu8i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu8c_BFu8i) C1{ FC2{} Fc:8 Fi:8}



static void Test_Sf_BFu8c_BFu8i()
{
  {
    init_simple_test("Sf_BFu8c_BFu8i");
    static STRUCT_IF_C Sf_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu8i, Sf_BFu8c_BFu8i)
//============================================================================


struct  Sf_BFu8c_BFu8ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu8c_BFu8ll) C1{ FC2{} Fc:8 FL:8}



static void Test_Sf_BFu8c_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu8ll");
    static STRUCT_IF_C Sf_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu8ll, Sf_BFu8c_BFu8ll)
//============================================================================


struct  Sf_BFu8c_BFu8s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu8c_BFu8s) C1{ FC2{} Fc:8 Fs:8}



static void Test_Sf_BFu8c_BFu8s()
{
  {
    init_simple_test("Sf_BFu8c_BFu8s");
    static STRUCT_IF_C Sf_BFu8c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu8s, Sf_BFu8c_BFu8s)
//============================================================================


struct  Sf_BFu8c_BFu9i  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu8c_BFu9i) C1{ FC2{} Fc:8 Fi:9}



static void Test_Sf_BFu8c_BFu9i()
{
  {
    init_simple_test("Sf_BFu8c_BFu9i");
    static STRUCT_IF_C Sf_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu9i, Sf_BFu8c_BFu9i)
//============================================================================


struct  Sf_BFu8c_BFu9ll  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu8c_BFu9ll) C1{ FC2{} Fc:8 FL:9}



static void Test_Sf_BFu8c_BFu9ll()
{
  {
    init_simple_test("Sf_BFu8c_BFu9ll");
    static STRUCT_IF_C Sf_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu9ll, Sf_BFu8c_BFu9ll)
//============================================================================


struct  Sf_BFu8c_BFu9s  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu8c_BFu9s) C1{ FC2{} Fc:8 Fs:9}



static void Test_Sf_BFu8c_BFu9s()
{
  {
    init_simple_test("Sf_BFu8c_BFu9s");
    static STRUCT_IF_C Sf_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_BFu9s, Sf_BFu8c_BFu9s)
//============================================================================


struct  Sf_BFu8c_C  {
  struct empty v1;
  unsigned char v2:8;
  char v3;
};
//SIG(1 Sf_BFu8c_C) C1{ FC2{} Fc:8 Fc}



static void Test_Sf_BFu8c_C()
{
  {
    init_simple_test("Sf_BFu8c_C");
    static STRUCT_IF_C Sf_BFu8c_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_C");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_C");
    check_field_offset(lv, v3, 1, "Sf_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_C, Sf_BFu8c_C)
//============================================================================


struct  Sf_BFu8c_D  {
  struct empty v1;
  unsigned char v2:8;
  double v3;
};
//SIG(1 Sf_BFu8c_D) C1{ FC2{} Fc:8 FL}



static void Test_Sf_BFu8c_D()
{
  {
    init_simple_test("Sf_BFu8c_D");
    static STRUCT_IF_C Sf_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_D");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_D, Sf_BFu8c_D)
//============================================================================


struct  Sf_BFu8c_F  {
  struct empty v1;
  unsigned char v2:8;
  float v3;
};
//SIG(1 Sf_BFu8c_F) C1{ FC2{} Fc:8 Fi}



static void Test_Sf_BFu8c_F()
{
  {
    init_simple_test("Sf_BFu8c_F");
    static STRUCT_IF_C Sf_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_F");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_F, Sf_BFu8c_F)
//============================================================================


struct  Sf_BFu8c_I  {
  struct empty v1;
  unsigned char v2:8;
  int v3;
};
//SIG(1 Sf_BFu8c_I) C1{ FC2{} Fc:8 Fi}



static void Test_Sf_BFu8c_I()
{
  {
    init_simple_test("Sf_BFu8c_I");
    static STRUCT_IF_C Sf_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_I");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_I, Sf_BFu8c_I)
//============================================================================


struct  Sf_BFu8c_Ip  {
  struct empty v1;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 Sf_BFu8c_Ip) C1{ FC2{} Fc:8 Fp}



static void Test_Sf_BFu8c_Ip()
{
  {
    init_simple_test("Sf_BFu8c_Ip");
    static STRUCT_IF_C Sf_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Ip");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Ip, Sf_BFu8c_Ip)
//============================================================================


struct  Sf_BFu8c_L  {
  struct empty v1;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 Sf_BFu8c_L) C1{ FC2{} Fc:8 FL}



static void Test_Sf_BFu8c_L()
{
  {
    init_simple_test("Sf_BFu8c_L");
    static STRUCT_IF_C Sf_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_L");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_L, Sf_BFu8c_L)
//============================================================================


struct  Sf_BFu8c_S  {
  struct empty v1;
  unsigned char v2:8;
  short v3;
};
//SIG(1 Sf_BFu8c_S) C1{ FC2{} Fc:8 Fs}



static void Test_Sf_BFu8c_S()
{
  {
    init_simple_test("Sf_BFu8c_S");
    static STRUCT_IF_C Sf_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_S");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_S, Sf_BFu8c_S)
//============================================================================


struct  Sf_BFu8c_Sf  {
  struct empty v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Sf_BFu8c_Sf) C1{ FC2{} Fc:8 FC2}



static void Test_Sf_BFu8c_Sf()
{
  {
    init_simple_test("Sf_BFu8c_Sf");
    static STRUCT_IF_C Sf_BFu8c_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Sf_BFu8c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Sf");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Sf, Sf_BFu8c_Sf)
//============================================================================


struct  Sf_BFu8c_Uc  {
  struct empty v1;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 Sf_BFu8c_Uc) C1{ FC2{} Fc:8 Fc}



static void Test_Sf_BFu8c_Uc()
{
  {
    init_simple_test("Sf_BFu8c_Uc");
    static STRUCT_IF_C Sf_BFu8c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_BFu8c_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Uc");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Uc, Sf_BFu8c_Uc)
//============================================================================


struct  Sf_BFu8c_Ui  {
  struct empty v1;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 Sf_BFu8c_Ui) C1{ FC2{} Fc:8 Fi}



static void Test_Sf_BFu8c_Ui()
{
  {
    init_simple_test("Sf_BFu8c_Ui");
    static STRUCT_IF_C Sf_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8c_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Ui");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Ui, Sf_BFu8c_Ui)
//============================================================================


struct  Sf_BFu8c_Ul  {
  struct empty v1;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 Sf_BFu8c_Ul) C1{ FC2{} Fc:8 FL}



static void Test_Sf_BFu8c_Ul()
{
  {
    init_simple_test("Sf_BFu8c_Ul");
    static STRUCT_IF_C Sf_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Ul");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Ul, Sf_BFu8c_Ul)
//============================================================================


struct  Sf_BFu8c_Us  {
  struct empty v1;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 Sf_BFu8c_Us) C1{ FC2{} Fc:8 Fs}



static void Test_Sf_BFu8c_Us()
{
  {
    init_simple_test("Sf_BFu8c_Us");
    static STRUCT_IF_C Sf_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8c_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Us");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Us, Sf_BFu8c_Us)
//============================================================================


struct  Sf_BFu8c_Vp  {
  struct empty v1;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 Sf_BFu8c_Vp) C1{ FC2{} Fc:8 Fp}



static void Test_Sf_BFu8c_Vp()
{
  {
    init_simple_test("Sf_BFu8c_Vp");
    static STRUCT_IF_C Sf_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8c_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu8c_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8c_Vp");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8c_Vp, Sf_BFu8c_Vp)
//============================================================================


struct  Sf_BFu8i  {
  struct empty v1;
  unsigned int v2:8;
};
//SIG(1 Sf_BFu8i) C1{ FC2{} Fi:8}



static void Test_Sf_BFu8i()
{
  {
    init_simple_test("Sf_BFu8i");
    static STRUCT_IF_C Sf_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i, Sf_BFu8i)
//============================================================================


struct  Sf_BFu8i_BFu15i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu8i_BFu15i) C1{ FC2{} Fi:8 Fi:15}



static void Test_Sf_BFu8i_BFu15i()
{
  {
    init_simple_test("Sf_BFu8i_BFu15i");
    static STRUCT_IF_C Sf_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu15i, Sf_BFu8i_BFu15i)
//============================================================================


struct  Sf_BFu8i_BFu15ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu8i_BFu15ll) C1{ FC2{} Fi:8 FL:15}



static void Test_Sf_BFu8i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu15ll");
    static STRUCT_IF_C Sf_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu15ll, Sf_BFu8i_BFu15ll)
//============================================================================


struct  Sf_BFu8i_BFu15s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu8i_BFu15s) C1{ FC2{} Fi:8 Fs:15}



static void Test_Sf_BFu8i_BFu15s()
{
  {
    init_simple_test("Sf_BFu8i_BFu15s");
    static STRUCT_IF_C Sf_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu15s, Sf_BFu8i_BFu15s)
//============================================================================


struct  Sf_BFu8i_BFu16i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu8i_BFu16i) C1{ FC2{} Fi:8 Fi:16}



static void Test_Sf_BFu8i_BFu16i()
{
  {
    init_simple_test("Sf_BFu8i_BFu16i");
    static STRUCT_IF_C Sf_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu16i, Sf_BFu8i_BFu16i)
//============================================================================


struct  Sf_BFu8i_BFu16ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu8i_BFu16ll) C1{ FC2{} Fi:8 FL:16}



static void Test_Sf_BFu8i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu16ll");
    static STRUCT_IF_C Sf_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu16ll, Sf_BFu8i_BFu16ll)
//============================================================================


struct  Sf_BFu8i_BFu16s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu8i_BFu16s) C1{ FC2{} Fi:8 Fs:16}



static void Test_Sf_BFu8i_BFu16s()
{
  {
    init_simple_test("Sf_BFu8i_BFu16s");
    static STRUCT_IF_C Sf_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu16s, Sf_BFu8i_BFu16s)
//============================================================================


struct  Sf_BFu8i_BFu17i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu8i_BFu17i) C1{ FC2{} Fi:8 Fi:17}



static void Test_Sf_BFu8i_BFu17i()
{
  {
    init_simple_test("Sf_BFu8i_BFu17i");
    static STRUCT_IF_C Sf_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu17i, Sf_BFu8i_BFu17i)
//============================================================================


struct  Sf_BFu8i_BFu17ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu8i_BFu17ll) C1{ FC2{} Fi:8 FL:17}



static void Test_Sf_BFu8i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu17ll");
    static STRUCT_IF_C Sf_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu17ll, Sf_BFu8i_BFu17ll)
//============================================================================


struct  Sf_BFu8i_BFu1c  {
  struct empty v1;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu8i_BFu1c) C1{ FC2{} Fi:8 Fc:1}



static void Test_Sf_BFu8i_BFu1c()
{
  {
    init_simple_test("Sf_BFu8i_BFu1c");
    static STRUCT_IF_C Sf_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu1c, Sf_BFu8i_BFu1c)
//============================================================================


struct  Sf_BFu8i_BFu1i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu8i_BFu1i) C1{ FC2{} Fi:8 Fi:1}



static void Test_Sf_BFu8i_BFu1i()
{
  {
    init_simple_test("Sf_BFu8i_BFu1i");
    static STRUCT_IF_C Sf_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu1i, Sf_BFu8i_BFu1i)
//============================================================================


struct  Sf_BFu8i_BFu1ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu8i_BFu1ll) C1{ FC2{} Fi:8 FL:1}



static void Test_Sf_BFu8i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu1ll");
    static STRUCT_IF_C Sf_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu1ll, Sf_BFu8i_BFu1ll)
//============================================================================


struct  Sf_BFu8i_BFu1s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu8i_BFu1s) C1{ FC2{} Fi:8 Fs:1}



static void Test_Sf_BFu8i_BFu1s()
{
  {
    init_simple_test("Sf_BFu8i_BFu1s");
    static STRUCT_IF_C Sf_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu1s, Sf_BFu8i_BFu1s)
//============================================================================


struct  Sf_BFu8i_BFu31i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu8i_BFu31i) C1{ FC2{} Fi:8 Fi:31}



static void Test_Sf_BFu8i_BFu31i()
{
  {
    init_simple_test("Sf_BFu8i_BFu31i");
    static STRUCT_IF_C Sf_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu31i, Sf_BFu8i_BFu31i)
//============================================================================


struct  Sf_BFu8i_BFu31ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu8i_BFu31ll) C1{ FC2{} Fi:8 FL:31}



static void Test_Sf_BFu8i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu31ll");
    static STRUCT_IF_C Sf_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu31ll, Sf_BFu8i_BFu31ll)
//============================================================================


struct  Sf_BFu8i_BFu32i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu8i_BFu32i) C1{ FC2{} Fi:8 Fi:32}



static void Test_Sf_BFu8i_BFu32i()
{
  {
    init_simple_test("Sf_BFu8i_BFu32i");
    static STRUCT_IF_C Sf_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu32i, Sf_BFu8i_BFu32i)
//============================================================================


struct  Sf_BFu8i_BFu32ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu8i_BFu32ll) C1{ FC2{} Fi:8 FL:32}



static void Test_Sf_BFu8i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu32ll");
    static STRUCT_IF_C Sf_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu32ll, Sf_BFu8i_BFu32ll)
//============================================================================


struct  Sf_BFu8i_BFu33  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu8i_BFu33) C1{ FC2{} Fi:8 FL:33}



static void Test_Sf_BFu8i_BFu33()
{
  {
    init_simple_test("Sf_BFu8i_BFu33");
    static STRUCT_IF_C Sf_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu33, Sf_BFu8i_BFu33)
//============================================================================


struct  Sf_BFu8i_BFu7c  {
  struct empty v1;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu8i_BFu7c) C1{ FC2{} Fi:8 Fc:7}



static void Test_Sf_BFu8i_BFu7c()
{
  {
    init_simple_test("Sf_BFu8i_BFu7c");
    static STRUCT_IF_C Sf_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu7c, Sf_BFu8i_BFu7c)
//============================================================================


struct  Sf_BFu8i_BFu7i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu8i_BFu7i) C1{ FC2{} Fi:8 Fi:7}



static void Test_Sf_BFu8i_BFu7i()
{
  {
    init_simple_test("Sf_BFu8i_BFu7i");
    static STRUCT_IF_C Sf_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu7i, Sf_BFu8i_BFu7i)
//============================================================================


struct  Sf_BFu8i_BFu7ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu8i_BFu7ll) C1{ FC2{} Fi:8 FL:7}



static void Test_Sf_BFu8i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu7ll");
    static STRUCT_IF_C Sf_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu7ll, Sf_BFu8i_BFu7ll)
//============================================================================


struct  Sf_BFu8i_BFu7s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu8i_BFu7s) C1{ FC2{} Fi:8 Fs:7}



static void Test_Sf_BFu8i_BFu7s()
{
  {
    init_simple_test("Sf_BFu8i_BFu7s");
    static STRUCT_IF_C Sf_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu7s, Sf_BFu8i_BFu7s)
//============================================================================


struct  Sf_BFu8i_BFu8c  {
  struct empty v1;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu8i_BFu8c) C1{ FC2{} Fi:8 Fc:8}



static void Test_Sf_BFu8i_BFu8c()
{
  {
    init_simple_test("Sf_BFu8i_BFu8c");
    static STRUCT_IF_C Sf_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu8c, Sf_BFu8i_BFu8c)
//============================================================================


struct  Sf_BFu8i_BFu8i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu8i_BFu8i) C1{ FC2{} Fi:8 Fi:8}



static void Test_Sf_BFu8i_BFu8i()
{
  {
    init_simple_test("Sf_BFu8i_BFu8i");
    static STRUCT_IF_C Sf_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu8i, Sf_BFu8i_BFu8i)
//============================================================================


struct  Sf_BFu8i_BFu8ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu8i_BFu8ll) C1{ FC2{} Fi:8 FL:8}



static void Test_Sf_BFu8i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu8ll");
    static STRUCT_IF_C Sf_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu8ll, Sf_BFu8i_BFu8ll)
//============================================================================


struct  Sf_BFu8i_BFu8s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu8i_BFu8s) C1{ FC2{} Fi:8 Fs:8}



static void Test_Sf_BFu8i_BFu8s()
{
  {
    init_simple_test("Sf_BFu8i_BFu8s");
    static STRUCT_IF_C Sf_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu8s, Sf_BFu8i_BFu8s)
//============================================================================


struct  Sf_BFu8i_BFu9i  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu8i_BFu9i) C1{ FC2{} Fi:8 Fi:9}



static void Test_Sf_BFu8i_BFu9i()
{
  {
    init_simple_test("Sf_BFu8i_BFu9i");
    static STRUCT_IF_C Sf_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu9i, Sf_BFu8i_BFu9i)
//============================================================================


struct  Sf_BFu8i_BFu9ll  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu8i_BFu9ll) C1{ FC2{} Fi:8 FL:9}



static void Test_Sf_BFu8i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu8i_BFu9ll");
    static STRUCT_IF_C Sf_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu9ll, Sf_BFu8i_BFu9ll)
//============================================================================


struct  Sf_BFu8i_BFu9s  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu8i_BFu9s) C1{ FC2{} Fi:8 Fs:9}



static void Test_Sf_BFu8i_BFu9s()
{
  {
    init_simple_test("Sf_BFu8i_BFu9s");
    static STRUCT_IF_C Sf_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_BFu9s, Sf_BFu8i_BFu9s)
//============================================================================


struct  Sf_BFu8i_C  {
  struct empty v1;
  unsigned int v2:8;
  char v3;
};
//SIG(1 Sf_BFu8i_C) C1{ FC2{} Fi:8 Fc}



static void Test_Sf_BFu8i_C()
{
  {
    init_simple_test("Sf_BFu8i_C");
    static STRUCT_IF_C Sf_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_C");
    check_field_offset(lv, v3, 1, "Sf_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_C, Sf_BFu8i_C)
//============================================================================


struct  Sf_BFu8i_D  {
  struct empty v1;
  unsigned int v2:8;
  double v3;
};
//SIG(1 Sf_BFu8i_D) C1{ FC2{} Fi:8 FL}



static void Test_Sf_BFu8i_D()
{
  {
    init_simple_test("Sf_BFu8i_D");
    static STRUCT_IF_C Sf_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_D, Sf_BFu8i_D)
//============================================================================


struct  Sf_BFu8i_F  {
  struct empty v1;
  unsigned int v2:8;
  float v3;
};
//SIG(1 Sf_BFu8i_F) C1{ FC2{} Fi:8 Fi}



static void Test_Sf_BFu8i_F()
{
  {
    init_simple_test("Sf_BFu8i_F");
    static STRUCT_IF_C Sf_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_F, Sf_BFu8i_F)
//============================================================================


struct  Sf_BFu8i_I  {
  struct empty v1;
  unsigned int v2:8;
  int v3;
};
//SIG(1 Sf_BFu8i_I) C1{ FC2{} Fi:8 Fi}



static void Test_Sf_BFu8i_I()
{
  {
    init_simple_test("Sf_BFu8i_I");
    static STRUCT_IF_C Sf_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_I, Sf_BFu8i_I)
//============================================================================


struct  Sf_BFu8i_Ip  {
  struct empty v1;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 Sf_BFu8i_Ip) C1{ FC2{} Fi:8 Fp}



static void Test_Sf_BFu8i_Ip()
{
  {
    init_simple_test("Sf_BFu8i_Ip");
    static STRUCT_IF_C Sf_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Ip, Sf_BFu8i_Ip)
//============================================================================


struct  Sf_BFu8i_L  {
  struct empty v1;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 Sf_BFu8i_L) C1{ FC2{} Fi:8 FL}



static void Test_Sf_BFu8i_L()
{
  {
    init_simple_test("Sf_BFu8i_L");
    static STRUCT_IF_C Sf_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_L, Sf_BFu8i_L)
//============================================================================


struct  Sf_BFu8i_S  {
  struct empty v1;
  unsigned int v2:8;
  short v3;
};
//SIG(1 Sf_BFu8i_S) C1{ FC2{} Fi:8 Fs}



static void Test_Sf_BFu8i_S()
{
  {
    init_simple_test("Sf_BFu8i_S");
    static STRUCT_IF_C Sf_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_S, Sf_BFu8i_S)
//============================================================================


struct  Sf_BFu8i_Sf  {
  struct empty v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Sf_BFu8i_Sf) C1{ FC2{} Fi:8 FC2}



static void Test_Sf_BFu8i_Sf()
{
  {
    init_simple_test("Sf_BFu8i_Sf");
    static STRUCT_IF_C Sf_BFu8i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Sf, Sf_BFu8i_Sf)
//============================================================================


struct  Sf_BFu8i_Uc  {
  struct empty v1;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 Sf_BFu8i_Uc) C1{ FC2{} Fi:8 Fc}



static void Test_Sf_BFu8i_Uc()
{
  {
    init_simple_test("Sf_BFu8i_Uc");
    static STRUCT_IF_C Sf_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Uc, Sf_BFu8i_Uc)
//============================================================================


struct  Sf_BFu8i_Ui  {
  struct empty v1;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 Sf_BFu8i_Ui) C1{ FC2{} Fi:8 Fi}



static void Test_Sf_BFu8i_Ui()
{
  {
    init_simple_test("Sf_BFu8i_Ui");
    static STRUCT_IF_C Sf_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Ui, Sf_BFu8i_Ui)
//============================================================================


struct  Sf_BFu8i_Ul  {
  struct empty v1;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 Sf_BFu8i_Ul) C1{ FC2{} Fi:8 FL}



static void Test_Sf_BFu8i_Ul()
{
  {
    init_simple_test("Sf_BFu8i_Ul");
    static STRUCT_IF_C Sf_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Ul, Sf_BFu8i_Ul)
//============================================================================


struct  Sf_BFu8i_Us  {
  struct empty v1;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 Sf_BFu8i_Us) C1{ FC2{} Fi:8 Fs}



static void Test_Sf_BFu8i_Us()
{
  {
    init_simple_test("Sf_BFu8i_Us");
    static STRUCT_IF_C Sf_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Us, Sf_BFu8i_Us)
//============================================================================


struct  Sf_BFu8i_Vp  {
  struct empty v1;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 Sf_BFu8i_Vp) C1{ FC2{} Fi:8 Fp}



static void Test_Sf_BFu8i_Vp()
{
  {
    init_simple_test("Sf_BFu8i_Vp");
    static STRUCT_IF_C Sf_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu8i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8i_Vp, Sf_BFu8i_Vp)
//============================================================================


struct  Sf_BFu8ll  {
  struct empty v1;
  __tsu64 v2:8;
};
//SIG(1 Sf_BFu8ll) C1{ FC2{} FL:8}



static void Test_Sf_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8ll");
    static STRUCT_IF_C Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll, Sf_BFu8ll)
//============================================================================


struct  Sf_BFu8ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu8ll_BFu15i) C1{ FC2{} FL:8 Fi:15}



static void Test_Sf_BFu8ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu15i");
    static STRUCT_IF_C Sf_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu15i, Sf_BFu8ll_BFu15i)
//============================================================================


struct  Sf_BFu8ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu8ll_BFu15ll) C1{ FC2{} FL:8 FL:15}



static void Test_Sf_BFu8ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu15ll, Sf_BFu8ll_BFu15ll)
//============================================================================


struct  Sf_BFu8ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu8ll_BFu15s) C1{ FC2{} FL:8 Fs:15}



static void Test_Sf_BFu8ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu15s");
    static STRUCT_IF_C Sf_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu15s, Sf_BFu8ll_BFu15s)
//============================================================================


struct  Sf_BFu8ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu8ll_BFu16i) C1{ FC2{} FL:8 Fi:16}



static void Test_Sf_BFu8ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu16i");
    static STRUCT_IF_C Sf_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu16i, Sf_BFu8ll_BFu16i)
//============================================================================


struct  Sf_BFu8ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu8ll_BFu16ll) C1{ FC2{} FL:8 FL:16}



static void Test_Sf_BFu8ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu16ll, Sf_BFu8ll_BFu16ll)
//============================================================================


struct  Sf_BFu8ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu8ll_BFu16s) C1{ FC2{} FL:8 Fs:16}



static void Test_Sf_BFu8ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu16s");
    static STRUCT_IF_C Sf_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu16s, Sf_BFu8ll_BFu16s)
//============================================================================


struct  Sf_BFu8ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu8ll_BFu17i) C1{ FC2{} FL:8 Fi:17}



static void Test_Sf_BFu8ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu17i");
    static STRUCT_IF_C Sf_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu17i, Sf_BFu8ll_BFu17i)
//============================================================================


struct  Sf_BFu8ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu8ll_BFu17ll) C1{ FC2{} FL:8 FL:17}



static void Test_Sf_BFu8ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu17ll, Sf_BFu8ll_BFu17ll)
//============================================================================


struct  Sf_BFu8ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu8ll_BFu1c) C1{ FC2{} FL:8 Fc:1}



static void Test_Sf_BFu8ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu8ll_BFu1c");
    static STRUCT_IF_C Sf_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu1c, Sf_BFu8ll_BFu1c)
//============================================================================


struct  Sf_BFu8ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu8ll_BFu1i) C1{ FC2{} FL:8 Fi:1}



static void Test_Sf_BFu8ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu1i");
    static STRUCT_IF_C Sf_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu1i, Sf_BFu8ll_BFu1i)
//============================================================================


struct  Sf_BFu8ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu8ll_BFu1ll) C1{ FC2{} FL:8 FL:1}



static void Test_Sf_BFu8ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu1ll, Sf_BFu8ll_BFu1ll)
//============================================================================


struct  Sf_BFu8ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu8ll_BFu1s) C1{ FC2{} FL:8 Fs:1}



static void Test_Sf_BFu8ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu1s");
    static STRUCT_IF_C Sf_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu1s, Sf_BFu8ll_BFu1s)
//============================================================================


struct  Sf_BFu8ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu8ll_BFu31i) C1{ FC2{} FL:8 Fi:31}



static void Test_Sf_BFu8ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu31i");
    static STRUCT_IF_C Sf_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu31i, Sf_BFu8ll_BFu31i)
//============================================================================


struct  Sf_BFu8ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu8ll_BFu31ll) C1{ FC2{} FL:8 FL:31}



static void Test_Sf_BFu8ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu31ll, Sf_BFu8ll_BFu31ll)
//============================================================================


struct  Sf_BFu8ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu8ll_BFu32i) C1{ FC2{} FL:8 Fi:32}



static void Test_Sf_BFu8ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu32i");
    static STRUCT_IF_C Sf_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu32i, Sf_BFu8ll_BFu32i)
//============================================================================


struct  Sf_BFu8ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu8ll_BFu32ll) C1{ FC2{} FL:8 FL:32}



static void Test_Sf_BFu8ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu32ll, Sf_BFu8ll_BFu32ll)
//============================================================================


struct  Sf_BFu8ll_BFu33  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu8ll_BFu33) C1{ FC2{} FL:8 FL:33}



static void Test_Sf_BFu8ll_BFu33()
{
  {
    init_simple_test("Sf_BFu8ll_BFu33");
    static STRUCT_IF_C Sf_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu33, Sf_BFu8ll_BFu33)
//============================================================================


struct  Sf_BFu8ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu8ll_BFu7c) C1{ FC2{} FL:8 Fc:7}



static void Test_Sf_BFu8ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu8ll_BFu7c");
    static STRUCT_IF_C Sf_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu7c, Sf_BFu8ll_BFu7c)
//============================================================================


struct  Sf_BFu8ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu8ll_BFu7i) C1{ FC2{} FL:8 Fi:7}



static void Test_Sf_BFu8ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu7i");
    static STRUCT_IF_C Sf_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu7i, Sf_BFu8ll_BFu7i)
//============================================================================


struct  Sf_BFu8ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu8ll_BFu7ll) C1{ FC2{} FL:8 FL:7}



static void Test_Sf_BFu8ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu7ll, Sf_BFu8ll_BFu7ll)
//============================================================================


struct  Sf_BFu8ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu8ll_BFu7s) C1{ FC2{} FL:8 Fs:7}



static void Test_Sf_BFu8ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu7s");
    static STRUCT_IF_C Sf_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu7s, Sf_BFu8ll_BFu7s)
//============================================================================


struct  Sf_BFu8ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu8ll_BFu8c) C1{ FC2{} FL:8 Fc:8}



static void Test_Sf_BFu8ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu8ll_BFu8c");
    static STRUCT_IF_C Sf_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu8c, Sf_BFu8ll_BFu8c)
//============================================================================


struct  Sf_BFu8ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu8ll_BFu8i) C1{ FC2{} FL:8 Fi:8}



static void Test_Sf_BFu8ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu8i");
    static STRUCT_IF_C Sf_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu8i, Sf_BFu8ll_BFu8i)
//============================================================================


struct  Sf_BFu8ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu8ll_BFu8ll) C1{ FC2{} FL:8 FL:8}



static void Test_Sf_BFu8ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu8ll, Sf_BFu8ll_BFu8ll)
//============================================================================


struct  Sf_BFu8ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu8ll_BFu8s) C1{ FC2{} FL:8 Fs:8}



static void Test_Sf_BFu8ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu8s");
    static STRUCT_IF_C Sf_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu8s, Sf_BFu8ll_BFu8s)
//============================================================================


struct  Sf_BFu8ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu8ll_BFu9i) C1{ FC2{} FL:8 Fi:9}



static void Test_Sf_BFu8ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu8ll_BFu9i");
    static STRUCT_IF_C Sf_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu9i, Sf_BFu8ll_BFu9i)
//============================================================================


struct  Sf_BFu8ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu8ll_BFu9ll) C1{ FC2{} FL:8 FL:9}



static void Test_Sf_BFu8ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu8ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu9ll, Sf_BFu8ll_BFu9ll)
//============================================================================


struct  Sf_BFu8ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu8ll_BFu9s) C1{ FC2{} FL:8 Fs:9}



static void Test_Sf_BFu8ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu8ll_BFu9s");
    static STRUCT_IF_C Sf_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_BFu9s, Sf_BFu8ll_BFu9s)
//============================================================================


struct  Sf_BFu8ll_C  {
  struct empty v1;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 Sf_BFu8ll_C) C1{ FC2{} FL:8 Fc}



static void Test_Sf_BFu8ll_C()
{
  {
    init_simple_test("Sf_BFu8ll_C");
    static STRUCT_IF_C Sf_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_C");
    check_field_offset(lv, v3, 1, "Sf_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_C, Sf_BFu8ll_C)
//============================================================================


struct  Sf_BFu8ll_D  {
  struct empty v1;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 Sf_BFu8ll_D) C1{ FC2{} FL:8 FL}



static void Test_Sf_BFu8ll_D()
{
  {
    init_simple_test("Sf_BFu8ll_D");
    static STRUCT_IF_C Sf_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_D, Sf_BFu8ll_D)
//============================================================================


struct  Sf_BFu8ll_F  {
  struct empty v1;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 Sf_BFu8ll_F) C1{ FC2{} FL:8 Fi}



static void Test_Sf_BFu8ll_F()
{
  {
    init_simple_test("Sf_BFu8ll_F");
    static STRUCT_IF_C Sf_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_F, Sf_BFu8ll_F)
//============================================================================


struct  Sf_BFu8ll_I  {
  struct empty v1;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 Sf_BFu8ll_I) C1{ FC2{} FL:8 Fi}



static void Test_Sf_BFu8ll_I()
{
  {
    init_simple_test("Sf_BFu8ll_I");
    static STRUCT_IF_C Sf_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_I, Sf_BFu8ll_I)
//============================================================================


struct  Sf_BFu8ll_Ip  {
  struct empty v1;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 Sf_BFu8ll_Ip) C1{ FC2{} FL:8 Fp}



static void Test_Sf_BFu8ll_Ip()
{
  {
    init_simple_test("Sf_BFu8ll_Ip");
    static STRUCT_IF_C Sf_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Ip, Sf_BFu8ll_Ip)
//============================================================================


struct  Sf_BFu8ll_L  {
  struct empty v1;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 Sf_BFu8ll_L) C1{ FC2{} FL:8 FL}



static void Test_Sf_BFu8ll_L()
{
  {
    init_simple_test("Sf_BFu8ll_L");
    static STRUCT_IF_C Sf_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_L, Sf_BFu8ll_L)
//============================================================================


struct  Sf_BFu8ll_S  {
  struct empty v1;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 Sf_BFu8ll_S) C1{ FC2{} FL:8 Fs}



static void Test_Sf_BFu8ll_S()
{
  {
    init_simple_test("Sf_BFu8ll_S");
    static STRUCT_IF_C Sf_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_S, Sf_BFu8ll_S)
//============================================================================


struct  Sf_BFu8ll_Sf  {
  struct empty v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Sf_BFu8ll_Sf) C1{ FC2{} FL:8 FC2}



static void Test_Sf_BFu8ll_Sf()
{
  {
    init_simple_test("Sf_BFu8ll_Sf");
    static STRUCT_IF_C Sf_BFu8ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Sf, Sf_BFu8ll_Sf)
//============================================================================


struct  Sf_BFu8ll_Uc  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 Sf_BFu8ll_Uc) C1{ FC2{} FL:8 Fc}



static void Test_Sf_BFu8ll_Uc()
{
  {
    init_simple_test("Sf_BFu8ll_Uc");
    static STRUCT_IF_C Sf_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Uc, Sf_BFu8ll_Uc)
//============================================================================


struct  Sf_BFu8ll_Ui  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 Sf_BFu8ll_Ui) C1{ FC2{} FL:8 Fi}



static void Test_Sf_BFu8ll_Ui()
{
  {
    init_simple_test("Sf_BFu8ll_Ui");
    static STRUCT_IF_C Sf_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Ui, Sf_BFu8ll_Ui)
//============================================================================


struct  Sf_BFu8ll_Ul  {
  struct empty v1;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 Sf_BFu8ll_Ul) C1{ FC2{} FL:8 FL}



static void Test_Sf_BFu8ll_Ul()
{
  {
    init_simple_test("Sf_BFu8ll_Ul");
    static STRUCT_IF_C Sf_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Ul, Sf_BFu8ll_Ul)
//============================================================================


struct  Sf_BFu8ll_Us  {
  struct empty v1;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 Sf_BFu8ll_Us) C1{ FC2{} FL:8 Fs}



static void Test_Sf_BFu8ll_Us()
{
  {
    init_simple_test("Sf_BFu8ll_Us");
    static STRUCT_IF_C Sf_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Us, Sf_BFu8ll_Us)
//============================================================================


struct  Sf_BFu8ll_Vp  {
  struct empty v1;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 Sf_BFu8ll_Vp) C1{ FC2{} FL:8 Fp}



static void Test_Sf_BFu8ll_Vp()
{
  {
    init_simple_test("Sf_BFu8ll_Vp");
    static STRUCT_IF_C Sf_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu8ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8ll_Vp, Sf_BFu8ll_Vp)
//============================================================================


struct  Sf_BFu8s  {
  struct empty v1;
  unsigned short v2:8;
};
//SIG(1 Sf_BFu8s) C1{ FC2{} Fs:8}



static void Test_Sf_BFu8s()
{
  {
    init_simple_test("Sf_BFu8s");
    static STRUCT_IF_C Sf_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s, Sf_BFu8s)
//============================================================================


struct  Sf_BFu8s_BFu15i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu8s_BFu15i) C1{ FC2{} Fs:8 Fi:15}



static void Test_Sf_BFu8s_BFu15i()
{
  {
    init_simple_test("Sf_BFu8s_BFu15i");
    static STRUCT_IF_C Sf_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu15i, Sf_BFu8s_BFu15i)
//============================================================================


struct  Sf_BFu8s_BFu15ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu8s_BFu15ll) C1{ FC2{} Fs:8 FL:15}



static void Test_Sf_BFu8s_BFu15ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu15ll");
    static STRUCT_IF_C Sf_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu15ll, Sf_BFu8s_BFu15ll)
//============================================================================


struct  Sf_BFu8s_BFu15s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu8s_BFu15s) C1{ FC2{} Fs:8 Fs:15}



static void Test_Sf_BFu8s_BFu15s()
{
  {
    init_simple_test("Sf_BFu8s_BFu15s");
    static STRUCT_IF_C Sf_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu15s, Sf_BFu8s_BFu15s)
//============================================================================


struct  Sf_BFu8s_BFu16i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu8s_BFu16i) C1{ FC2{} Fs:8 Fi:16}



static void Test_Sf_BFu8s_BFu16i()
{
  {
    init_simple_test("Sf_BFu8s_BFu16i");
    static STRUCT_IF_C Sf_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu16i, Sf_BFu8s_BFu16i)
//============================================================================


struct  Sf_BFu8s_BFu16ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu8s_BFu16ll) C1{ FC2{} Fs:8 FL:16}



static void Test_Sf_BFu8s_BFu16ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu16ll");
    static STRUCT_IF_C Sf_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu16ll, Sf_BFu8s_BFu16ll)
//============================================================================


struct  Sf_BFu8s_BFu16s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu8s_BFu16s) C1{ FC2{} Fs:8 Fs:16}



static void Test_Sf_BFu8s_BFu16s()
{
  {
    init_simple_test("Sf_BFu8s_BFu16s");
    static STRUCT_IF_C Sf_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu16s, Sf_BFu8s_BFu16s)
//============================================================================


struct  Sf_BFu8s_BFu17i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu8s_BFu17i) C1{ FC2{} Fs:8 Fi:17}



static void Test_Sf_BFu8s_BFu17i()
{
  {
    init_simple_test("Sf_BFu8s_BFu17i");
    static STRUCT_IF_C Sf_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu17i, Sf_BFu8s_BFu17i)
//============================================================================


struct  Sf_BFu8s_BFu17ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu8s_BFu17ll) C1{ FC2{} Fs:8 FL:17}



static void Test_Sf_BFu8s_BFu17ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu17ll");
    static STRUCT_IF_C Sf_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu17ll, Sf_BFu8s_BFu17ll)
//============================================================================


struct  Sf_BFu8s_BFu1c  {
  struct empty v1;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu8s_BFu1c) C1{ FC2{} Fs:8 Fc:1}



static void Test_Sf_BFu8s_BFu1c()
{
  {
    init_simple_test("Sf_BFu8s_BFu1c");
    static STRUCT_IF_C Sf_BFu8s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu1c, Sf_BFu8s_BFu1c)
//============================================================================


struct  Sf_BFu8s_BFu1i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu8s_BFu1i) C1{ FC2{} Fs:8 Fi:1}



static void Test_Sf_BFu8s_BFu1i()
{
  {
    init_simple_test("Sf_BFu8s_BFu1i");
    static STRUCT_IF_C Sf_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu1i, Sf_BFu8s_BFu1i)
//============================================================================


struct  Sf_BFu8s_BFu1ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu8s_BFu1ll) C1{ FC2{} Fs:8 FL:1}



static void Test_Sf_BFu8s_BFu1ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu1ll");
    static STRUCT_IF_C Sf_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu1ll, Sf_BFu8s_BFu1ll)
//============================================================================


struct  Sf_BFu8s_BFu1s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu8s_BFu1s) C1{ FC2{} Fs:8 Fs:1}



static void Test_Sf_BFu8s_BFu1s()
{
  {
    init_simple_test("Sf_BFu8s_BFu1s");
    static STRUCT_IF_C Sf_BFu8s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu1s, Sf_BFu8s_BFu1s)
//============================================================================


struct  Sf_BFu8s_BFu31i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu8s_BFu31i) C1{ FC2{} Fs:8 Fi:31}



static void Test_Sf_BFu8s_BFu31i()
{
  {
    init_simple_test("Sf_BFu8s_BFu31i");
    static STRUCT_IF_C Sf_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu31i, Sf_BFu8s_BFu31i)
//============================================================================


struct  Sf_BFu8s_BFu31ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu8s_BFu31ll) C1{ FC2{} Fs:8 FL:31}



static void Test_Sf_BFu8s_BFu31ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu31ll");
    static STRUCT_IF_C Sf_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu31ll, Sf_BFu8s_BFu31ll)
//============================================================================


struct  Sf_BFu8s_BFu32i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu8s_BFu32i) C1{ FC2{} Fs:8 Fi:32}



static void Test_Sf_BFu8s_BFu32i()
{
  {
    init_simple_test("Sf_BFu8s_BFu32i");
    static STRUCT_IF_C Sf_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu32i, Sf_BFu8s_BFu32i)
//============================================================================


struct  Sf_BFu8s_BFu32ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu8s_BFu32ll) C1{ FC2{} Fs:8 FL:32}



static void Test_Sf_BFu8s_BFu32ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu32ll");
    static STRUCT_IF_C Sf_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu32ll, Sf_BFu8s_BFu32ll)
//============================================================================


struct  Sf_BFu8s_BFu33  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu8s_BFu33) C1{ FC2{} Fs:8 FL:33}



static void Test_Sf_BFu8s_BFu33()
{
  {
    init_simple_test("Sf_BFu8s_BFu33");
    static STRUCT_IF_C Sf_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu33, Sf_BFu8s_BFu33)
//============================================================================


struct  Sf_BFu8s_BFu7c  {
  struct empty v1;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu8s_BFu7c) C1{ FC2{} Fs:8 Fc:7}



static void Test_Sf_BFu8s_BFu7c()
{
  {
    init_simple_test("Sf_BFu8s_BFu7c");
    static STRUCT_IF_C Sf_BFu8s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu7c, Sf_BFu8s_BFu7c)
//============================================================================


struct  Sf_BFu8s_BFu7i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu8s_BFu7i) C1{ FC2{} Fs:8 Fi:7}



static void Test_Sf_BFu8s_BFu7i()
{
  {
    init_simple_test("Sf_BFu8s_BFu7i");
    static STRUCT_IF_C Sf_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu7i, Sf_BFu8s_BFu7i)
//============================================================================


struct  Sf_BFu8s_BFu7ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu8s_BFu7ll) C1{ FC2{} Fs:8 FL:7}



static void Test_Sf_BFu8s_BFu7ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu7ll");
    static STRUCT_IF_C Sf_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu7ll, Sf_BFu8s_BFu7ll)
//============================================================================


struct  Sf_BFu8s_BFu7s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu8s_BFu7s) C1{ FC2{} Fs:8 Fs:7}



static void Test_Sf_BFu8s_BFu7s()
{
  {
    init_simple_test("Sf_BFu8s_BFu7s");
    static STRUCT_IF_C Sf_BFu8s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu7s, Sf_BFu8s_BFu7s)
//============================================================================


struct  Sf_BFu8s_BFu8c  {
  struct empty v1;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu8s_BFu8c) C1{ FC2{} Fs:8 Fc:8}



static void Test_Sf_BFu8s_BFu8c()
{
  {
    init_simple_test("Sf_BFu8s_BFu8c");
    static STRUCT_IF_C Sf_BFu8s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu8c, Sf_BFu8s_BFu8c)
//============================================================================


struct  Sf_BFu8s_BFu8i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu8s_BFu8i) C1{ FC2{} Fs:8 Fi:8}



static void Test_Sf_BFu8s_BFu8i()
{
  {
    init_simple_test("Sf_BFu8s_BFu8i");
    static STRUCT_IF_C Sf_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu8i, Sf_BFu8s_BFu8i)
//============================================================================


struct  Sf_BFu8s_BFu8ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu8s_BFu8ll) C1{ FC2{} Fs:8 FL:8}



static void Test_Sf_BFu8s_BFu8ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu8ll");
    static STRUCT_IF_C Sf_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu8ll, Sf_BFu8s_BFu8ll)
//============================================================================


struct  Sf_BFu8s_BFu8s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu8s_BFu8s) C1{ FC2{} Fs:8 Fs:8}



static void Test_Sf_BFu8s_BFu8s()
{
  {
    init_simple_test("Sf_BFu8s_BFu8s");
    static STRUCT_IF_C Sf_BFu8s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu8s, Sf_BFu8s_BFu8s)
//============================================================================


struct  Sf_BFu8s_BFu9i  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu8s_BFu9i) C1{ FC2{} Fs:8 Fi:9}



static void Test_Sf_BFu8s_BFu9i()
{
  {
    init_simple_test("Sf_BFu8s_BFu9i");
    static STRUCT_IF_C Sf_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu9i, Sf_BFu8s_BFu9i)
//============================================================================


struct  Sf_BFu8s_BFu9ll  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu8s_BFu9ll) C1{ FC2{} Fs:8 FL:9}



static void Test_Sf_BFu8s_BFu9ll()
{
  {
    init_simple_test("Sf_BFu8s_BFu9ll");
    static STRUCT_IF_C Sf_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu9ll, Sf_BFu8s_BFu9ll)
//============================================================================


struct  Sf_BFu8s_BFu9s  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu8s_BFu9s) C1{ FC2{} Fs:8 Fs:9}



static void Test_Sf_BFu8s_BFu9s()
{
  {
    init_simple_test("Sf_BFu8s_BFu9s");
    static STRUCT_IF_C Sf_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_BFu9s, Sf_BFu8s_BFu9s)
//============================================================================


struct  Sf_BFu8s_C  {
  struct empty v1;
  unsigned short v2:8;
  char v3;
};
//SIG(1 Sf_BFu8s_C) C1{ FC2{} Fs:8 Fc}



static void Test_Sf_BFu8s_C()
{
  {
    init_simple_test("Sf_BFu8s_C");
    static STRUCT_IF_C Sf_BFu8s_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_C");
    check_field_offset(lv, v3, 1, "Sf_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_C, Sf_BFu8s_C)
//============================================================================


struct  Sf_BFu8s_D  {
  struct empty v1;
  unsigned short v2:8;
  double v3;
};
//SIG(1 Sf_BFu8s_D) C1{ FC2{} Fs:8 FL}



static void Test_Sf_BFu8s_D()
{
  {
    init_simple_test("Sf_BFu8s_D");
    static STRUCT_IF_C Sf_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_D, Sf_BFu8s_D)
//============================================================================


struct  Sf_BFu8s_F  {
  struct empty v1;
  unsigned short v2:8;
  float v3;
};
//SIG(1 Sf_BFu8s_F) C1{ FC2{} Fs:8 Fi}



static void Test_Sf_BFu8s_F()
{
  {
    init_simple_test("Sf_BFu8s_F");
    static STRUCT_IF_C Sf_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_F, Sf_BFu8s_F)
//============================================================================


struct  Sf_BFu8s_I  {
  struct empty v1;
  unsigned short v2:8;
  int v3;
};
//SIG(1 Sf_BFu8s_I) C1{ FC2{} Fs:8 Fi}



static void Test_Sf_BFu8s_I()
{
  {
    init_simple_test("Sf_BFu8s_I");
    static STRUCT_IF_C Sf_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_I, Sf_BFu8s_I)
//============================================================================


struct  Sf_BFu8s_Ip  {
  struct empty v1;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 Sf_BFu8s_Ip) C1{ FC2{} Fs:8 Fp}



static void Test_Sf_BFu8s_Ip()
{
  {
    init_simple_test("Sf_BFu8s_Ip");
    static STRUCT_IF_C Sf_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Ip, Sf_BFu8s_Ip)
//============================================================================


struct  Sf_BFu8s_L  {
  struct empty v1;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 Sf_BFu8s_L) C1{ FC2{} Fs:8 FL}



static void Test_Sf_BFu8s_L()
{
  {
    init_simple_test("Sf_BFu8s_L");
    static STRUCT_IF_C Sf_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_L, Sf_BFu8s_L)
//============================================================================


struct  Sf_BFu8s_S  {
  struct empty v1;
  unsigned short v2:8;
  short v3;
};
//SIG(1 Sf_BFu8s_S) C1{ FC2{} Fs:8 Fs}



static void Test_Sf_BFu8s_S()
{
  {
    init_simple_test("Sf_BFu8s_S");
    static STRUCT_IF_C Sf_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_S, Sf_BFu8s_S)
//============================================================================


struct  Sf_BFu8s_Sf  {
  struct empty v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Sf_BFu8s_Sf) C1{ FC2{} Fs:8 FC2}



static void Test_Sf_BFu8s_Sf()
{
  {
    init_simple_test("Sf_BFu8s_Sf");
    static STRUCT_IF_C Sf_BFu8s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Sf");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Sf");
    check_field_offset(lv, v3, 1, "Sf_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Sf, Sf_BFu8s_Sf)
//============================================================================


struct  Sf_BFu8s_Uc  {
  struct empty v1;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 Sf_BFu8s_Uc) C1{ FC2{} Fs:8 Fc}



static void Test_Sf_BFu8s_Uc()
{
  {
    init_simple_test("Sf_BFu8s_Uc");
    static STRUCT_IF_C Sf_BFu8s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Uc");
    check_field_offset(lv, v3, 1, "Sf_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Uc, Sf_BFu8s_Uc)
//============================================================================


struct  Sf_BFu8s_Ui  {
  struct empty v1;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 Sf_BFu8s_Ui) C1{ FC2{} Fs:8 Fi}



static void Test_Sf_BFu8s_Ui()
{
  {
    init_simple_test("Sf_BFu8s_Ui");
    static STRUCT_IF_C Sf_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu8s_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Ui, Sf_BFu8s_Ui)
//============================================================================


struct  Sf_BFu8s_Ul  {
  struct empty v1;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 Sf_BFu8s_Ul) C1{ FC2{} Fs:8 FL}



static void Test_Sf_BFu8s_Ul()
{
  {
    init_simple_test("Sf_BFu8s_Ul");
    static STRUCT_IF_C Sf_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Ul, Sf_BFu8s_Ul)
//============================================================================


struct  Sf_BFu8s_Us  {
  struct empty v1;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 Sf_BFu8s_Us) C1{ FC2{} Fs:8 Fs}



static void Test_Sf_BFu8s_Us()
{
  {
    init_simple_test("Sf_BFu8s_Us");
    static STRUCT_IF_C Sf_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu8s_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Us, Sf_BFu8s_Us)
//============================================================================


struct  Sf_BFu8s_Vp  {
  struct empty v1;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 Sf_BFu8s_Vp) C1{ FC2{} Fs:8 Fp}



static void Test_Sf_BFu8s_Vp()
{
  {
    init_simple_test("Sf_BFu8s_Vp");
    static STRUCT_IF_C Sf_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu8s_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu8s_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 8, 1, "Sf_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 0, 8, hide_ull(1LL<<7), "Sf_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu8s_Vp, Sf_BFu8s_Vp)
//============================================================================


struct  Sf_BFu9i  {
  struct empty v1;
  unsigned int v2:9;
};
//SIG(1 Sf_BFu9i) C1{ FC2{} Fi:9}



static void Test_Sf_BFu9i()
{
  {
    init_simple_test("Sf_BFu9i");
    static STRUCT_IF_C Sf_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i, Sf_BFu9i)
//============================================================================


struct  Sf_BFu9i_BFu15i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu9i_BFu15i) C1{ FC2{} Fi:9 Fi:15}



static void Test_Sf_BFu9i_BFu15i()
{
  {
    init_simple_test("Sf_BFu9i_BFu15i");
    static STRUCT_IF_C Sf_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu15i, Sf_BFu9i_BFu15i)
//============================================================================


struct  Sf_BFu9i_BFu15ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu9i_BFu15ll) C1{ FC2{} Fi:9 FL:15}



static void Test_Sf_BFu9i_BFu15ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu15ll");
    static STRUCT_IF_C Sf_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu15ll, Sf_BFu9i_BFu15ll)
//============================================================================


struct  Sf_BFu9i_BFu15s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu9i_BFu15s) C1{ FC2{} Fi:9 Fs:15}



static void Test_Sf_BFu9i_BFu15s()
{
  {
    init_simple_test("Sf_BFu9i_BFu15s");
    static STRUCT_IF_C Sf_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu15s, Sf_BFu9i_BFu15s)
//============================================================================


struct  Sf_BFu9i_BFu16i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu9i_BFu16i) C1{ FC2{} Fi:9 Fi:16}



static void Test_Sf_BFu9i_BFu16i()
{
  {
    init_simple_test("Sf_BFu9i_BFu16i");
    static STRUCT_IF_C Sf_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu16i, Sf_BFu9i_BFu16i)
//============================================================================


struct  Sf_BFu9i_BFu16ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu9i_BFu16ll) C1{ FC2{} Fi:9 FL:16}



static void Test_Sf_BFu9i_BFu16ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu16ll");
    static STRUCT_IF_C Sf_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu16ll, Sf_BFu9i_BFu16ll)
//============================================================================


struct  Sf_BFu9i_BFu16s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu9i_BFu16s) C1{ FC2{} Fi:9 Fs:16}



static void Test_Sf_BFu9i_BFu16s()
{
  {
    init_simple_test("Sf_BFu9i_BFu16s");
    static STRUCT_IF_C Sf_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu16s, Sf_BFu9i_BFu16s)
//============================================================================


struct  Sf_BFu9i_BFu17i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu9i_BFu17i) C1{ FC2{} Fi:9 Fi:17}



static void Test_Sf_BFu9i_BFu17i()
{
  {
    init_simple_test("Sf_BFu9i_BFu17i");
    static STRUCT_IF_C Sf_BFu9i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu17i, Sf_BFu9i_BFu17i)
//============================================================================


struct  Sf_BFu9i_BFu17ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu9i_BFu17ll) C1{ FC2{} Fi:9 FL:17}



static void Test_Sf_BFu9i_BFu17ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu17ll");
    static STRUCT_IF_C Sf_BFu9i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu17ll, Sf_BFu9i_BFu17ll)
//============================================================================


struct  Sf_BFu9i_BFu1c  {
  struct empty v1;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu9i_BFu1c) C1{ FC2{} Fi:9 Fc:1}



static void Test_Sf_BFu9i_BFu1c()
{
  {
    init_simple_test("Sf_BFu9i_BFu1c");
    static STRUCT_IF_C Sf_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu1c, Sf_BFu9i_BFu1c)
//============================================================================


struct  Sf_BFu9i_BFu1i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu9i_BFu1i) C1{ FC2{} Fi:9 Fi:1}



static void Test_Sf_BFu9i_BFu1i()
{
  {
    init_simple_test("Sf_BFu9i_BFu1i");
    static STRUCT_IF_C Sf_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu1i, Sf_BFu9i_BFu1i)
//============================================================================


struct  Sf_BFu9i_BFu1ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu9i_BFu1ll) C1{ FC2{} Fi:9 FL:1}



static void Test_Sf_BFu9i_BFu1ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu1ll");
    static STRUCT_IF_C Sf_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu1ll, Sf_BFu9i_BFu1ll)
//============================================================================


struct  Sf_BFu9i_BFu1s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu9i_BFu1s) C1{ FC2{} Fi:9 Fs:1}



static void Test_Sf_BFu9i_BFu1s()
{
  {
    init_simple_test("Sf_BFu9i_BFu1s");
    static STRUCT_IF_C Sf_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu1s, Sf_BFu9i_BFu1s)
//============================================================================


struct  Sf_BFu9i_BFu31i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu9i_BFu31i) C1{ FC2{} Fi:9 Fi:31}



static void Test_Sf_BFu9i_BFu31i()
{
  {
    init_simple_test("Sf_BFu9i_BFu31i");
    static STRUCT_IF_C Sf_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu31i, Sf_BFu9i_BFu31i)
//============================================================================


struct  Sf_BFu9i_BFu31ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu9i_BFu31ll) C1{ FC2{} Fi:9 FL:31}



static void Test_Sf_BFu9i_BFu31ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu31ll");
    static STRUCT_IF_C Sf_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu31ll, Sf_BFu9i_BFu31ll)
//============================================================================


struct  Sf_BFu9i_BFu32i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu9i_BFu32i) C1{ FC2{} Fi:9 Fi:32}



static void Test_Sf_BFu9i_BFu32i()
{
  {
    init_simple_test("Sf_BFu9i_BFu32i");
    static STRUCT_IF_C Sf_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu32i, Sf_BFu9i_BFu32i)
//============================================================================


struct  Sf_BFu9i_BFu32ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu9i_BFu32ll) C1{ FC2{} Fi:9 FL:32}



static void Test_Sf_BFu9i_BFu32ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu32ll");
    static STRUCT_IF_C Sf_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu32ll, Sf_BFu9i_BFu32ll)
//============================================================================


struct  Sf_BFu9i_BFu33  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu9i_BFu33) C1{ FC2{} Fi:9 FL:33}



static void Test_Sf_BFu9i_BFu33()
{
  {
    init_simple_test("Sf_BFu9i_BFu33");
    static STRUCT_IF_C Sf_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu33, Sf_BFu9i_BFu33)
//============================================================================


struct  Sf_BFu9i_BFu7c  {
  struct empty v1;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu9i_BFu7c) C1{ FC2{} Fi:9 Fc:7}



static void Test_Sf_BFu9i_BFu7c()
{
  {
    init_simple_test("Sf_BFu9i_BFu7c");
    static STRUCT_IF_C Sf_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu7c, Sf_BFu9i_BFu7c)
//============================================================================


struct  Sf_BFu9i_BFu7i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu9i_BFu7i) C1{ FC2{} Fi:9 Fi:7}



static void Test_Sf_BFu9i_BFu7i()
{
  {
    init_simple_test("Sf_BFu9i_BFu7i");
    static STRUCT_IF_C Sf_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu7i, Sf_BFu9i_BFu7i)
//============================================================================


struct  Sf_BFu9i_BFu7ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu9i_BFu7ll) C1{ FC2{} Fi:9 FL:7}



static void Test_Sf_BFu9i_BFu7ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu7ll");
    static STRUCT_IF_C Sf_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu7ll, Sf_BFu9i_BFu7ll)
//============================================================================


struct  Sf_BFu9i_BFu7s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu9i_BFu7s) C1{ FC2{} Fi:9 Fs:7}



static void Test_Sf_BFu9i_BFu7s()
{
  {
    init_simple_test("Sf_BFu9i_BFu7s");
    static STRUCT_IF_C Sf_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu7s, Sf_BFu9i_BFu7s)
//============================================================================


struct  Sf_BFu9i_BFu8c  {
  struct empty v1;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu9i_BFu8c) C1{ FC2{} Fi:9 Fc:8}



static void Test_Sf_BFu9i_BFu8c()
{
  {
    init_simple_test("Sf_BFu9i_BFu8c");
    static STRUCT_IF_C Sf_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu8c, Sf_BFu9i_BFu8c)
//============================================================================


struct  Sf_BFu9i_BFu8i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu9i_BFu8i) C1{ FC2{} Fi:9 Fi:8}



static void Test_Sf_BFu9i_BFu8i()
{
  {
    init_simple_test("Sf_BFu9i_BFu8i");
    static STRUCT_IF_C Sf_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu8i, Sf_BFu9i_BFu8i)
//============================================================================


struct  Sf_BFu9i_BFu8ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu9i_BFu8ll) C1{ FC2{} Fi:9 FL:8}



static void Test_Sf_BFu9i_BFu8ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu8ll");
    static STRUCT_IF_C Sf_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu8ll, Sf_BFu9i_BFu8ll)
//============================================================================


struct  Sf_BFu9i_BFu8s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu9i_BFu8s) C1{ FC2{} Fi:9 Fs:8}



static void Test_Sf_BFu9i_BFu8s()
{
  {
    init_simple_test("Sf_BFu9i_BFu8s");
    static STRUCT_IF_C Sf_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu8s, Sf_BFu9i_BFu8s)
//============================================================================


struct  Sf_BFu9i_BFu9i  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu9i_BFu9i) C1{ FC2{} Fi:9 Fi:9}



static void Test_Sf_BFu9i_BFu9i()
{
  {
    init_simple_test("Sf_BFu9i_BFu9i");
    static STRUCT_IF_C Sf_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu9i, Sf_BFu9i_BFu9i)
//============================================================================


struct  Sf_BFu9i_BFu9ll  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu9i_BFu9ll) C1{ FC2{} Fi:9 FL:9}



static void Test_Sf_BFu9i_BFu9ll()
{
  {
    init_simple_test("Sf_BFu9i_BFu9ll");
    static STRUCT_IF_C Sf_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu9ll, Sf_BFu9i_BFu9ll)
//============================================================================


struct  Sf_BFu9i_BFu9s  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu9i_BFu9s) C1{ FC2{} Fi:9 Fs:9}



static void Test_Sf_BFu9i_BFu9s()
{
  {
    init_simple_test("Sf_BFu9i_BFu9s");
    static STRUCT_IF_C Sf_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_BFu9s, Sf_BFu9i_BFu9s)
//============================================================================


struct  Sf_BFu9i_C  {
  struct empty v1;
  unsigned int v2:9;
  char v3;
};
//SIG(1 Sf_BFu9i_C) C1{ FC2{} Fi:9 Fc}



static void Test_Sf_BFu9i_C()
{
  {
    init_simple_test("Sf_BFu9i_C");
    static STRUCT_IF_C Sf_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_C");
    check_field_offset(lv, v3, 2, "Sf_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_C, Sf_BFu9i_C)
//============================================================================


struct  Sf_BFu9i_D  {
  struct empty v1;
  unsigned int v2:9;
  double v3;
};
//SIG(1 Sf_BFu9i_D) C1{ FC2{} Fi:9 FL}



static void Test_Sf_BFu9i_D()
{
  {
    init_simple_test("Sf_BFu9i_D");
    static STRUCT_IF_C Sf_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_D, Sf_BFu9i_D)
//============================================================================


struct  Sf_BFu9i_F  {
  struct empty v1;
  unsigned int v2:9;
  float v3;
};
//SIG(1 Sf_BFu9i_F) C1{ FC2{} Fi:9 Fi}



static void Test_Sf_BFu9i_F()
{
  {
    init_simple_test("Sf_BFu9i_F");
    static STRUCT_IF_C Sf_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_F, Sf_BFu9i_F)
//============================================================================


struct  Sf_BFu9i_I  {
  struct empty v1;
  unsigned int v2:9;
  int v3;
};
//SIG(1 Sf_BFu9i_I) C1{ FC2{} Fi:9 Fi}



static void Test_Sf_BFu9i_I()
{
  {
    init_simple_test("Sf_BFu9i_I");
    static STRUCT_IF_C Sf_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_I, Sf_BFu9i_I)
//============================================================================


struct  Sf_BFu9i_Ip  {
  struct empty v1;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 Sf_BFu9i_Ip) C1{ FC2{} Fi:9 Fp}



static void Test_Sf_BFu9i_Ip()
{
  {
    init_simple_test("Sf_BFu9i_Ip");
    static STRUCT_IF_C Sf_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Ip, Sf_BFu9i_Ip)
//============================================================================


struct  Sf_BFu9i_L  {
  struct empty v1;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 Sf_BFu9i_L) C1{ FC2{} Fi:9 FL}



static void Test_Sf_BFu9i_L()
{
  {
    init_simple_test("Sf_BFu9i_L");
    static STRUCT_IF_C Sf_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_L, Sf_BFu9i_L)
//============================================================================


struct  Sf_BFu9i_S  {
  struct empty v1;
  unsigned int v2:9;
  short v3;
};
//SIG(1 Sf_BFu9i_S) C1{ FC2{} Fi:9 Fs}



static void Test_Sf_BFu9i_S()
{
  {
    init_simple_test("Sf_BFu9i_S");
    static STRUCT_IF_C Sf_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_S");
    check_field_offset(lv, v3, 2, "Sf_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_S, Sf_BFu9i_S)
//============================================================================


struct  Sf_BFu9i_Sf  {
  struct empty v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Sf_BFu9i_Sf) C1{ FC2{} Fi:9 FC2}



static void Test_Sf_BFu9i_Sf()
{
  {
    init_simple_test("Sf_BFu9i_Sf");
    static STRUCT_IF_C Sf_BFu9i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Sf");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Sf, Sf_BFu9i_Sf)
//============================================================================


struct  Sf_BFu9i_Uc  {
  struct empty v1;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 Sf_BFu9i_Uc) C1{ FC2{} Fi:9 Fc}



static void Test_Sf_BFu9i_Uc()
{
  {
    init_simple_test("Sf_BFu9i_Uc");
    static STRUCT_IF_C Sf_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Uc, Sf_BFu9i_Uc)
//============================================================================


struct  Sf_BFu9i_Ui  {
  struct empty v1;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 Sf_BFu9i_Ui) C1{ FC2{} Fi:9 Fi}



static void Test_Sf_BFu9i_Ui()
{
  {
    init_simple_test("Sf_BFu9i_Ui");
    static STRUCT_IF_C Sf_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Ui, Sf_BFu9i_Ui)
//============================================================================


struct  Sf_BFu9i_Ul  {
  struct empty v1;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 Sf_BFu9i_Ul) C1{ FC2{} Fi:9 FL}



static void Test_Sf_BFu9i_Ul()
{
  {
    init_simple_test("Sf_BFu9i_Ul");
    static STRUCT_IF_C Sf_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Ul, Sf_BFu9i_Ul)
//============================================================================


struct  Sf_BFu9i_Us  {
  struct empty v1;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 Sf_BFu9i_Us) C1{ FC2{} Fi:9 Fs}



static void Test_Sf_BFu9i_Us()
{
  {
    init_simple_test("Sf_BFu9i_Us");
    static STRUCT_IF_C Sf_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9i_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Us, Sf_BFu9i_Us)
//============================================================================


struct  Sf_BFu9i_Vp  {
  struct empty v1;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 Sf_BFu9i_Vp) C1{ FC2{} Fi:9 Fp}



static void Test_Sf_BFu9i_Vp()
{
  {
    init_simple_test("Sf_BFu9i_Vp");
    static STRUCT_IF_C Sf_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9i_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu9i_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9i_Vp, Sf_BFu9i_Vp)
//============================================================================


struct  Sf_BFu9ll  {
  struct empty v1;
  __tsu64 v2:9;
};
//SIG(1 Sf_BFu9ll) C1{ FC2{} FL:9}



static void Test_Sf_BFu9ll()
{
  {
    init_simple_test("Sf_BFu9ll");
    static STRUCT_IF_C Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll, Sf_BFu9ll)
//============================================================================


struct  Sf_BFu9ll_BFu15i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu9ll_BFu15i) C1{ FC2{} FL:9 Fi:15}



static void Test_Sf_BFu9ll_BFu15i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu15i");
    static STRUCT_IF_C Sf_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu15i, Sf_BFu9ll_BFu15i)
//============================================================================


struct  Sf_BFu9ll_BFu15ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu9ll_BFu15ll) C1{ FC2{} FL:9 FL:15}



static void Test_Sf_BFu9ll_BFu15ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu15ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu15ll, Sf_BFu9ll_BFu15ll)
//============================================================================


struct  Sf_BFu9ll_BFu15s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu9ll_BFu15s) C1{ FC2{} FL:9 Fs:15}



static void Test_Sf_BFu9ll_BFu15s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu15s");
    static STRUCT_IF_C Sf_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu15s, Sf_BFu9ll_BFu15s)
//============================================================================


struct  Sf_BFu9ll_BFu16i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu9ll_BFu16i) C1{ FC2{} FL:9 Fi:16}



static void Test_Sf_BFu9ll_BFu16i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu16i");
    static STRUCT_IF_C Sf_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu16i, Sf_BFu9ll_BFu16i)
//============================================================================


struct  Sf_BFu9ll_BFu16ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu9ll_BFu16ll) C1{ FC2{} FL:9 FL:16}



static void Test_Sf_BFu9ll_BFu16ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu16ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu16ll, Sf_BFu9ll_BFu16ll)
//============================================================================


struct  Sf_BFu9ll_BFu16s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu9ll_BFu16s) C1{ FC2{} FL:9 Fs:16}



static void Test_Sf_BFu9ll_BFu16s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu16s");
    static STRUCT_IF_C Sf_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu16s, Sf_BFu9ll_BFu16s)
//============================================================================


struct  Sf_BFu9ll_BFu17i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu9ll_BFu17i) C1{ FC2{} FL:9 Fi:17}



static void Test_Sf_BFu9ll_BFu17i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu17i");
    static STRUCT_IF_C Sf_BFu9ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu17i, Sf_BFu9ll_BFu17i)
//============================================================================


struct  Sf_BFu9ll_BFu17ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu9ll_BFu17ll) C1{ FC2{} FL:9 FL:17}



static void Test_Sf_BFu9ll_BFu17ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu17ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu17ll, Sf_BFu9ll_BFu17ll)
//============================================================================


struct  Sf_BFu9ll_BFu1c  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu9ll_BFu1c) C1{ FC2{} FL:9 Fc:1}



static void Test_Sf_BFu9ll_BFu1c()
{
  {
    init_simple_test("Sf_BFu9ll_BFu1c");
    static STRUCT_IF_C Sf_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu1c, Sf_BFu9ll_BFu1c)
//============================================================================


struct  Sf_BFu9ll_BFu1i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu9ll_BFu1i) C1{ FC2{} FL:9 Fi:1}



static void Test_Sf_BFu9ll_BFu1i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu1i");
    static STRUCT_IF_C Sf_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu1i, Sf_BFu9ll_BFu1i)
//============================================================================


struct  Sf_BFu9ll_BFu1ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu9ll_BFu1ll) C1{ FC2{} FL:9 FL:1}



static void Test_Sf_BFu9ll_BFu1ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu1ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu1ll, Sf_BFu9ll_BFu1ll)
//============================================================================


struct  Sf_BFu9ll_BFu1s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu9ll_BFu1s) C1{ FC2{} FL:9 Fs:1}



static void Test_Sf_BFu9ll_BFu1s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu1s");
    static STRUCT_IF_C Sf_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu1s, Sf_BFu9ll_BFu1s)
//============================================================================


struct  Sf_BFu9ll_BFu31i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu9ll_BFu31i) C1{ FC2{} FL:9 Fi:31}



static void Test_Sf_BFu9ll_BFu31i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu31i");
    static STRUCT_IF_C Sf_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu31i, Sf_BFu9ll_BFu31i)
//============================================================================


struct  Sf_BFu9ll_BFu31ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu9ll_BFu31ll) C1{ FC2{} FL:9 FL:31}



static void Test_Sf_BFu9ll_BFu31ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu31ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu31ll, Sf_BFu9ll_BFu31ll)
//============================================================================


struct  Sf_BFu9ll_BFu32i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu9ll_BFu32i) C1{ FC2{} FL:9 Fi:32}



static void Test_Sf_BFu9ll_BFu32i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu32i");
    static STRUCT_IF_C Sf_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu32i, Sf_BFu9ll_BFu32i)
//============================================================================


struct  Sf_BFu9ll_BFu32ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu9ll_BFu32ll) C1{ FC2{} FL:9 FL:32}



static void Test_Sf_BFu9ll_BFu32ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu32ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu32ll, Sf_BFu9ll_BFu32ll)
//============================================================================


struct  Sf_BFu9ll_BFu33  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu9ll_BFu33) C1{ FC2{} FL:9 FL:33}



static void Test_Sf_BFu9ll_BFu33()
{
  {
    init_simple_test("Sf_BFu9ll_BFu33");
    static STRUCT_IF_C Sf_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu33, Sf_BFu9ll_BFu33)
//============================================================================


struct  Sf_BFu9ll_BFu7c  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu9ll_BFu7c) C1{ FC2{} FL:9 Fc:7}



static void Test_Sf_BFu9ll_BFu7c()
{
  {
    init_simple_test("Sf_BFu9ll_BFu7c");
    static STRUCT_IF_C Sf_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu7c, Sf_BFu9ll_BFu7c)
//============================================================================


struct  Sf_BFu9ll_BFu7i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu9ll_BFu7i) C1{ FC2{} FL:9 Fi:7}



static void Test_Sf_BFu9ll_BFu7i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu7i");
    static STRUCT_IF_C Sf_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu7i, Sf_BFu9ll_BFu7i)
//============================================================================


struct  Sf_BFu9ll_BFu7ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu9ll_BFu7ll) C1{ FC2{} FL:9 FL:7}



static void Test_Sf_BFu9ll_BFu7ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu7ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu7ll, Sf_BFu9ll_BFu7ll)
//============================================================================


struct  Sf_BFu9ll_BFu7s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu9ll_BFu7s) C1{ FC2{} FL:9 Fs:7}



static void Test_Sf_BFu9ll_BFu7s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu7s");
    static STRUCT_IF_C Sf_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu7s, Sf_BFu9ll_BFu7s)
//============================================================================


struct  Sf_BFu9ll_BFu8c  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu9ll_BFu8c) C1{ FC2{} FL:9 Fc:8}



static void Test_Sf_BFu9ll_BFu8c()
{
  {
    init_simple_test("Sf_BFu9ll_BFu8c");
    static STRUCT_IF_C Sf_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu8c, Sf_BFu9ll_BFu8c)
//============================================================================


struct  Sf_BFu9ll_BFu8i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu9ll_BFu8i) C1{ FC2{} FL:9 Fi:8}



static void Test_Sf_BFu9ll_BFu8i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu8i");
    static STRUCT_IF_C Sf_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu8i, Sf_BFu9ll_BFu8i)
//============================================================================


struct  Sf_BFu9ll_BFu8ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu9ll_BFu8ll) C1{ FC2{} FL:9 FL:8}



static void Test_Sf_BFu9ll_BFu8ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu8ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu8ll, Sf_BFu9ll_BFu8ll)
//============================================================================


struct  Sf_BFu9ll_BFu8s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu9ll_BFu8s) C1{ FC2{} FL:9 Fs:8}



static void Test_Sf_BFu9ll_BFu8s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu8s");
    static STRUCT_IF_C Sf_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu8s, Sf_BFu9ll_BFu8s)
//============================================================================


struct  Sf_BFu9ll_BFu9i  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu9ll_BFu9i) C1{ FC2{} FL:9 Fi:9}



static void Test_Sf_BFu9ll_BFu9i()
{
  {
    init_simple_test("Sf_BFu9ll_BFu9i");
    static STRUCT_IF_C Sf_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu9i, Sf_BFu9ll_BFu9i)
//============================================================================


struct  Sf_BFu9ll_BFu9ll  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu9ll_BFu9ll) C1{ FC2{} FL:9 FL:9}



static void Test_Sf_BFu9ll_BFu9ll()
{
  {
    init_simple_test("Sf_BFu9ll_BFu9ll");
    static STRUCT_IF_C Sf_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu9ll, Sf_BFu9ll_BFu9ll)
//============================================================================


struct  Sf_BFu9ll_BFu9s  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu9ll_BFu9s) C1{ FC2{} FL:9 Fs:9}



static void Test_Sf_BFu9ll_BFu9s()
{
  {
    init_simple_test("Sf_BFu9ll_BFu9s");
    static STRUCT_IF_C Sf_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_BFu9s, Sf_BFu9ll_BFu9s)
//============================================================================


struct  Sf_BFu9ll_C  {
  struct empty v1;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 Sf_BFu9ll_C) C1{ FC2{} FL:9 Fc}



static void Test_Sf_BFu9ll_C()
{
  {
    init_simple_test("Sf_BFu9ll_C");
    static STRUCT_IF_C Sf_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_C");
    check_field_offset(lv, v3, 2, "Sf_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_C, Sf_BFu9ll_C)
//============================================================================


struct  Sf_BFu9ll_D  {
  struct empty v1;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 Sf_BFu9ll_D) C1{ FC2{} FL:9 FL}



static void Test_Sf_BFu9ll_D()
{
  {
    init_simple_test("Sf_BFu9ll_D");
    static STRUCT_IF_C Sf_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_D, Sf_BFu9ll_D)
//============================================================================


struct  Sf_BFu9ll_F  {
  struct empty v1;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 Sf_BFu9ll_F) C1{ FC2{} FL:9 Fi}



static void Test_Sf_BFu9ll_F()
{
  {
    init_simple_test("Sf_BFu9ll_F");
    static STRUCT_IF_C Sf_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_F, Sf_BFu9ll_F)
//============================================================================


struct  Sf_BFu9ll_I  {
  struct empty v1;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 Sf_BFu9ll_I) C1{ FC2{} FL:9 Fi}



static void Test_Sf_BFu9ll_I()
{
  {
    init_simple_test("Sf_BFu9ll_I");
    static STRUCT_IF_C Sf_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_I, Sf_BFu9ll_I)
//============================================================================


struct  Sf_BFu9ll_Ip  {
  struct empty v1;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 Sf_BFu9ll_Ip) C1{ FC2{} FL:9 Fp}



static void Test_Sf_BFu9ll_Ip()
{
  {
    init_simple_test("Sf_BFu9ll_Ip");
    static STRUCT_IF_C Sf_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Ip, Sf_BFu9ll_Ip)
//============================================================================


struct  Sf_BFu9ll_L  {
  struct empty v1;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 Sf_BFu9ll_L) C1{ FC2{} FL:9 FL}



static void Test_Sf_BFu9ll_L()
{
  {
    init_simple_test("Sf_BFu9ll_L");
    static STRUCT_IF_C Sf_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_L, Sf_BFu9ll_L)
//============================================================================


struct  Sf_BFu9ll_S  {
  struct empty v1;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 Sf_BFu9ll_S) C1{ FC2{} FL:9 Fs}



static void Test_Sf_BFu9ll_S()
{
  {
    init_simple_test("Sf_BFu9ll_S");
    static STRUCT_IF_C Sf_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_S");
    check_field_offset(lv, v3, 2, "Sf_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_S, Sf_BFu9ll_S)
//============================================================================


struct  Sf_BFu9ll_Sf  {
  struct empty v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Sf_BFu9ll_Sf) C1{ FC2{} FL:9 FC2}



static void Test_Sf_BFu9ll_Sf()
{
  {
    init_simple_test("Sf_BFu9ll_Sf");
    static STRUCT_IF_C Sf_BFu9ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Sf, Sf_BFu9ll_Sf)
//============================================================================


struct  Sf_BFu9ll_Uc  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 Sf_BFu9ll_Uc) C1{ FC2{} FL:9 Fc}



static void Test_Sf_BFu9ll_Uc()
{
  {
    init_simple_test("Sf_BFu9ll_Uc");
    static STRUCT_IF_C Sf_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Uc, Sf_BFu9ll_Uc)
//============================================================================


struct  Sf_BFu9ll_Ui  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 Sf_BFu9ll_Ui) C1{ FC2{} FL:9 Fi}



static void Test_Sf_BFu9ll_Ui()
{
  {
    init_simple_test("Sf_BFu9ll_Ui");
    static STRUCT_IF_C Sf_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Ui, Sf_BFu9ll_Ui)
//============================================================================


struct  Sf_BFu9ll_Ul  {
  struct empty v1;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 Sf_BFu9ll_Ul) C1{ FC2{} FL:9 FL}



static void Test_Sf_BFu9ll_Ul()
{
  {
    init_simple_test("Sf_BFu9ll_Ul");
    static STRUCT_IF_C Sf_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Ul, Sf_BFu9ll_Ul)
//============================================================================


struct  Sf_BFu9ll_Us  {
  struct empty v1;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 Sf_BFu9ll_Us) C1{ FC2{} FL:9 Fs}



static void Test_Sf_BFu9ll_Us()
{
  {
    init_simple_test("Sf_BFu9ll_Us");
    static STRUCT_IF_C Sf_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Us, Sf_BFu9ll_Us)
//============================================================================


struct  Sf_BFu9ll_Vp  {
  struct empty v1;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 Sf_BFu9ll_Vp) C1{ FC2{} FL:9 Fp}



static void Test_Sf_BFu9ll_Vp()
{
  {
    init_simple_test("Sf_BFu9ll_Vp");
    static STRUCT_IF_C Sf_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9ll_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu9ll_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9ll_Vp, Sf_BFu9ll_Vp)
//============================================================================


struct  Sf_BFu9s  {
  struct empty v1;
  unsigned short v2:9;
};
//SIG(1 Sf_BFu9s) C1{ FC2{} Fs:9}



static void Test_Sf_BFu9s()
{
  {
    init_simple_test("Sf_BFu9s");
    static STRUCT_IF_C Sf_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s, Sf_BFu9s)
//============================================================================


struct  Sf_BFu9s_BFu15i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 Sf_BFu9s_BFu15i) C1{ FC2{} Fs:9 Fi:15}



static void Test_Sf_BFu9s_BFu15i()
{
  {
    init_simple_test("Sf_BFu9s_BFu15i");
    static STRUCT_IF_C Sf_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu15i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu15i, Sf_BFu9s_BFu15i)
//============================================================================


struct  Sf_BFu9s_BFu15ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 Sf_BFu9s_BFu15ll) C1{ FC2{} Fs:9 FL:15}



static void Test_Sf_BFu9s_BFu15ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu15ll");
    static STRUCT_IF_C Sf_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "Sf_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu15ll, Sf_BFu9s_BFu15ll)
//============================================================================


struct  Sf_BFu9s_BFu15s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 Sf_BFu9s_BFu15s) C1{ FC2{} Fs:9 Fs:15}



static void Test_Sf_BFu9s_BFu15s()
{
  {
    init_simple_test("Sf_BFu9s_BFu15s");
    static STRUCT_IF_C Sf_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu15s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu15s, Sf_BFu9s_BFu15s)
//============================================================================


struct  Sf_BFu9s_BFu16i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 Sf_BFu9s_BFu16i) C1{ FC2{} Fs:9 Fi:16}



static void Test_Sf_BFu9s_BFu16i()
{
  {
    init_simple_test("Sf_BFu9s_BFu16i");
    static STRUCT_IF_C Sf_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu16i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu16i, Sf_BFu9s_BFu16i)
//============================================================================


struct  Sf_BFu9s_BFu16ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 Sf_BFu9s_BFu16ll) C1{ FC2{} Fs:9 FL:16}



static void Test_Sf_BFu9s_BFu16ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu16ll");
    static STRUCT_IF_C Sf_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "Sf_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu16ll, Sf_BFu9s_BFu16ll)
//============================================================================


struct  Sf_BFu9s_BFu16s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 Sf_BFu9s_BFu16s) C1{ FC2{} Fs:9 Fs:16}



static void Test_Sf_BFu9s_BFu16s()
{
  {
    init_simple_test("Sf_BFu9s_BFu16s");
    static STRUCT_IF_C Sf_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu16s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu16s, Sf_BFu9s_BFu16s)
//============================================================================


struct  Sf_BFu9s_BFu17i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 Sf_BFu9s_BFu17i) C1{ FC2{} Fs:9 Fi:17}



static void Test_Sf_BFu9s_BFu17i()
{
  {
    init_simple_test("Sf_BFu9s_BFu17i");
    static STRUCT_IF_C Sf_BFu9s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu17i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu17i, Sf_BFu9s_BFu17i)
//============================================================================


struct  Sf_BFu9s_BFu17ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 Sf_BFu9s_BFu17ll) C1{ FC2{} Fs:9 FL:17}



static void Test_Sf_BFu9s_BFu17ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu17ll");
    static STRUCT_IF_C Sf_BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "Sf_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "Sf_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu17ll, Sf_BFu9s_BFu17ll)
//============================================================================


struct  Sf_BFu9s_BFu1c  {
  struct empty v1;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 Sf_BFu9s_BFu1c) C1{ FC2{} Fs:9 Fc:1}



static void Test_Sf_BFu9s_BFu1c()
{
  {
    init_simple_test("Sf_BFu9s_BFu1c");
    static STRUCT_IF_C Sf_BFu9s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu1c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu1c, Sf_BFu9s_BFu1c)
//============================================================================


struct  Sf_BFu9s_BFu1i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 Sf_BFu9s_BFu1i) C1{ FC2{} Fs:9 Fi:1}



static void Test_Sf_BFu9s_BFu1i()
{
  {
    init_simple_test("Sf_BFu9s_BFu1i");
    static STRUCT_IF_C Sf_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu1i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu1i, Sf_BFu9s_BFu1i)
//============================================================================


struct  Sf_BFu9s_BFu1ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 Sf_BFu9s_BFu1ll) C1{ FC2{} Fs:9 FL:1}



static void Test_Sf_BFu9s_BFu1ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu1ll");
    static STRUCT_IF_C Sf_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu1ll, Sf_BFu9s_BFu1ll)
//============================================================================


struct  Sf_BFu9s_BFu1s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 Sf_BFu9s_BFu1s) C1{ FC2{} Fs:9 Fs:1}



static void Test_Sf_BFu9s_BFu1s()
{
  {
    init_simple_test("Sf_BFu9s_BFu1s");
    static STRUCT_IF_C Sf_BFu9s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu1s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "Sf_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu1s, Sf_BFu9s_BFu1s)
//============================================================================


struct  Sf_BFu9s_BFu31i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 Sf_BFu9s_BFu31i) C1{ FC2{} Fs:9 Fi:31}



static void Test_Sf_BFu9s_BFu31i()
{
  {
    init_simple_test("Sf_BFu9s_BFu31i");
    static STRUCT_IF_C Sf_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu31i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu31i, Sf_BFu9s_BFu31i)
//============================================================================


struct  Sf_BFu9s_BFu31ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 Sf_BFu9s_BFu31ll) C1{ FC2{} Fs:9 FL:31}



static void Test_Sf_BFu9s_BFu31ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu31ll");
    static STRUCT_IF_C Sf_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "Sf_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "Sf_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu31ll, Sf_BFu9s_BFu31ll)
//============================================================================


struct  Sf_BFu9s_BFu32i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 Sf_BFu9s_BFu32i) C1{ FC2{} Fs:9 Fi:32}



static void Test_Sf_BFu9s_BFu32i()
{
  {
    init_simple_test("Sf_BFu9s_BFu32i");
    static STRUCT_IF_C Sf_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu32i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu32i, Sf_BFu9s_BFu32i)
//============================================================================


struct  Sf_BFu9s_BFu32ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 Sf_BFu9s_BFu32ll) C1{ FC2{} Fs:9 FL:32}



static void Test_Sf_BFu9s_BFu32ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu32ll");
    static STRUCT_IF_C Sf_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "Sf_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "Sf_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu32ll, Sf_BFu9s_BFu32ll)
//============================================================================


struct  Sf_BFu9s_BFu33  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 Sf_BFu9s_BFu33) C1{ FC2{} Fs:9 FL:33}



static void Test_Sf_BFu9s_BFu33()
{
  {
    init_simple_test("Sf_BFu9s_BFu33");
    static STRUCT_IF_C Sf_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu33.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "Sf_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "Sf_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu33, Sf_BFu9s_BFu33)
//============================================================================


struct  Sf_BFu9s_BFu7c  {
  struct empty v1;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 Sf_BFu9s_BFu7c) C1{ FC2{} Fs:9 Fc:7}



static void Test_Sf_BFu9s_BFu7c()
{
  {
    init_simple_test("Sf_BFu9s_BFu7c");
    static STRUCT_IF_C Sf_BFu9s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu7c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu7c, Sf_BFu9s_BFu7c)
//============================================================================


struct  Sf_BFu9s_BFu7i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 Sf_BFu9s_BFu7i) C1{ FC2{} Fs:9 Fi:7}



static void Test_Sf_BFu9s_BFu7i()
{
  {
    init_simple_test("Sf_BFu9s_BFu7i");
    static STRUCT_IF_C Sf_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu7i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu7i, Sf_BFu9s_BFu7i)
//============================================================================


struct  Sf_BFu9s_BFu7ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 Sf_BFu9s_BFu7ll) C1{ FC2{} Fs:9 FL:7}



static void Test_Sf_BFu9s_BFu7ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu7ll");
    static STRUCT_IF_C Sf_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu7ll, Sf_BFu9s_BFu7ll)
//============================================================================


struct  Sf_BFu9s_BFu7s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 Sf_BFu9s_BFu7s) C1{ FC2{} Fs:9 Fs:7}



static void Test_Sf_BFu9s_BFu7s()
{
  {
    init_simple_test("Sf_BFu9s_BFu7s");
    static STRUCT_IF_C Sf_BFu9s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu7s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "Sf_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "Sf_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu7s, Sf_BFu9s_BFu7s)
//============================================================================


struct  Sf_BFu9s_BFu8c  {
  struct empty v1;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 Sf_BFu9s_BFu8c) C1{ FC2{} Fs:9 Fc:8}



static void Test_Sf_BFu9s_BFu8c()
{
  {
    init_simple_test("Sf_BFu9s_BFu8c");
    static STRUCT_IF_C Sf_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu8c.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu8c, Sf_BFu9s_BFu8c)
//============================================================================


struct  Sf_BFu9s_BFu8i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 Sf_BFu9s_BFu8i) C1{ FC2{} Fs:9 Fi:8}



static void Test_Sf_BFu9s_BFu8i()
{
  {
    init_simple_test("Sf_BFu9s_BFu8i");
    static STRUCT_IF_C Sf_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu8i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu8i, Sf_BFu9s_BFu8i)
//============================================================================


struct  Sf_BFu9s_BFu8ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 Sf_BFu9s_BFu8ll) C1{ FC2{} Fs:9 FL:8}



static void Test_Sf_BFu9s_BFu8ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu8ll");
    static STRUCT_IF_C Sf_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "Sf_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu8ll, Sf_BFu9s_BFu8ll)
//============================================================================


struct  Sf_BFu9s_BFu8s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 Sf_BFu9s_BFu8s) C1{ FC2{} Fs:9 Fs:8}



static void Test_Sf_BFu9s_BFu8s()
{
  {
    init_simple_test("Sf_BFu9s_BFu8s");
    static STRUCT_IF_C Sf_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu8s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu8s, Sf_BFu9s_BFu8s)
//============================================================================


struct  Sf_BFu9s_BFu9i  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 Sf_BFu9s_BFu9i) C1{ FC2{} Fs:9 Fi:9}



static void Test_Sf_BFu9s_BFu9i()
{
  {
    init_simple_test("Sf_BFu9s_BFu9i");
    static STRUCT_IF_C Sf_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu9i.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu9i, Sf_BFu9s_BFu9i)
//============================================================================


struct  Sf_BFu9s_BFu9ll  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 Sf_BFu9s_BFu9ll) C1{ FC2{} Fs:9 FL:9}



static void Test_Sf_BFu9s_BFu9ll()
{
  {
    init_simple_test("Sf_BFu9s_BFu9ll");
    static STRUCT_IF_C Sf_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "Sf_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu9ll, Sf_BFu9s_BFu9ll)
//============================================================================


struct  Sf_BFu9s_BFu9s  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 Sf_BFu9s_BFu9s) C1{ FC2{} Fs:9 Fs:9}



static void Test_Sf_BFu9s_BFu9s()
{
  {
    init_simple_test("Sf_BFu9s_BFu9s");
    static STRUCT_IF_C Sf_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_BFu9s.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_BFu9s, Sf_BFu9s_BFu9s)
//============================================================================


struct  Sf_BFu9s_C  {
  struct empty v1;
  unsigned short v2:9;
  char v3;
};
//SIG(1 Sf_BFu9s_C) C1{ FC2{} Fs:9 Fc}



static void Test_Sf_BFu9s_C()
{
  {
    init_simple_test("Sf_BFu9s_C");
    static STRUCT_IF_C Sf_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_C)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_C.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_C");
    check_field_offset(lv, v3, 2, "Sf_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_C, Sf_BFu9s_C)
//============================================================================


struct  Sf_BFu9s_D  {
  struct empty v1;
  unsigned short v2:9;
  double v3;
};
//SIG(1 Sf_BFu9s_D) C1{ FC2{} Fs:9 FL}



static void Test_Sf_BFu9s_D()
{
  {
    init_simple_test("Sf_BFu9s_D");
    static STRUCT_IF_C Sf_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_D)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_D.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_D, Sf_BFu9s_D)
//============================================================================


struct  Sf_BFu9s_F  {
  struct empty v1;
  unsigned short v2:9;
  float v3;
};
//SIG(1 Sf_BFu9s_F) C1{ FC2{} Fs:9 Fi}



static void Test_Sf_BFu9s_F()
{
  {
    init_simple_test("Sf_BFu9s_F");
    static STRUCT_IF_C Sf_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_F)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_F.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_F");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_F, Sf_BFu9s_F)
//============================================================================


struct  Sf_BFu9s_I  {
  struct empty v1;
  unsigned short v2:9;
  int v3;
};
//SIG(1 Sf_BFu9s_I) C1{ FC2{} Fs:9 Fi}



static void Test_Sf_BFu9s_I()
{
  {
    init_simple_test("Sf_BFu9s_I");
    static STRUCT_IF_C Sf_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_I)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_I.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_I");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_I, Sf_BFu9s_I)
//============================================================================


struct  Sf_BFu9s_Ip  {
  struct empty v1;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 Sf_BFu9s_Ip) C1{ FC2{} Fs:9 Fp}



static void Test_Sf_BFu9s_Ip()
{
  {
    init_simple_test("Sf_BFu9s_Ip");
    static STRUCT_IF_C Sf_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_Ip)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Ip.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Ip, Sf_BFu9s_Ip)
//============================================================================


struct  Sf_BFu9s_L  {
  struct empty v1;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 Sf_BFu9s_L) C1{ FC2{} Fs:9 FL}



static void Test_Sf_BFu9s_L()
{
  {
    init_simple_test("Sf_BFu9s_L");
    static STRUCT_IF_C Sf_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_L)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_L.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_L, Sf_BFu9s_L)
//============================================================================


struct  Sf_BFu9s_S  {
  struct empty v1;
  unsigned short v2:9;
  short v3;
};
//SIG(1 Sf_BFu9s_S) C1{ FC2{} Fs:9 Fs}



static void Test_Sf_BFu9s_S()
{
  {
    init_simple_test("Sf_BFu9s_S");
    static STRUCT_IF_C Sf_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_S)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_S.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_S");
    check_field_offset(lv, v3, 2, "Sf_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_S, Sf_BFu9s_S)
//============================================================================


struct  Sf_BFu9s_Sf  {
  struct empty v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Sf_BFu9s_Sf) C1{ FC2{} Fs:9 FC2}



static void Test_Sf_BFu9s_Sf()
{
  {
    init_simple_test("Sf_BFu9s_Sf");
    static STRUCT_IF_C Sf_BFu9s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_BFu9s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Sf");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Sf");
    check_field_offset(lv, v3, 2, "Sf_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Sf, Sf_BFu9s_Sf)
//============================================================================


struct  Sf_BFu9s_Uc  {
  struct empty v1;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 Sf_BFu9s_Uc) C1{ FC2{} Fs:9 Fc}



static void Test_Sf_BFu9s_Uc()
{
  {
    init_simple_test("Sf_BFu9s_Uc");
    static STRUCT_IF_C Sf_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_Uc)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Uc.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Uc");
    check_field_offset(lv, v3, 2, "Sf_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Uc, Sf_BFu9s_Uc)
//============================================================================


struct  Sf_BFu9s_Ui  {
  struct empty v1;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 Sf_BFu9s_Ui) C1{ FC2{} Fs:9 Fi}



static void Test_Sf_BFu9s_Ui()
{
  {
    init_simple_test("Sf_BFu9s_Ui");
    static STRUCT_IF_C Sf_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_BFu9s_Ui)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Ui.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "Sf_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Ui, Sf_BFu9s_Ui)
//============================================================================


struct  Sf_BFu9s_Ul  {
  struct empty v1;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 Sf_BFu9s_Ul) C1{ FC2{} Fs:9 FL}



static void Test_Sf_BFu9s_Ul()
{
  {
    init_simple_test("Sf_BFu9s_Ul");
    static STRUCT_IF_C Sf_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_Ul)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Ul.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Ul, Sf_BFu9s_Ul)
//============================================================================


struct  Sf_BFu9s_Us  {
  struct empty v1;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 Sf_BFu9s_Us) C1{ FC2{} Fs:9 Fs}



static void Test_Sf_BFu9s_Us()
{
  {
    init_simple_test("Sf_BFu9s_Us");
    static STRUCT_IF_C Sf_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_BFu9s_Us)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Us.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Us");
    check_field_offset(lv, v3, 2, "Sf_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Us, Sf_BFu9s_Us)
//============================================================================


struct  Sf_BFu9s_Vp  {
  struct empty v1;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 Sf_BFu9s_Vp) C1{ FC2{} Fs:9 Fp}



static void Test_Sf_BFu9s_Vp()
{
  {
    init_simple_test("Sf_BFu9s_Vp");
    static STRUCT_IF_C Sf_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_BFu9s_Vp)");
    check_field_offset(lv, v1, 0, "Sf_BFu9s_Vp.v1");
    set_bf_and_test(lv, v2, 0, 0, 9, 1, "Sf_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 0, 9, hide_ull(1LL<<8), "Sf_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_BFu9s_Vp, Sf_BFu9s_Vp)
//============================================================================


struct  Sf_C  {
  struct empty v1;
  char v2;
};
//SIG(1 Sf_C) C1{ FC2{} Fc}



static void Test_Sf_C()
{
  {
    init_simple_test("Sf_C");
    STRUCT_IF_C Sf_C lv;
    check2(sizeof(lv), 1, "sizeof(Sf_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C)");
    check_field_offset(lv, v1, 0, "Sf_C.v1");
    check_field_offset(lv, v2, 0, "Sf_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C, Sf_C)
//============================================================================


struct  Sf_C_BFu15i  {
  struct empty v1;
  char v2;
  unsigned int v3:15;
};
//SIG(1 Sf_C_BFu15i) C1{ FC2{} Fc Fi:15}



static void Test_Sf_C_BFu15i()
{
  {
    init_simple_test("Sf_C_BFu15i");
    static STRUCT_IF_C Sf_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_C_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu15i, Sf_C_BFu15i)
//============================================================================


struct  Sf_C_BFu15ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_C_BFu15ll) C1{ FC2{} Fc FL:15}



static void Test_Sf_C_BFu15ll()
{
  {
    init_simple_test("Sf_C_BFu15ll");
    static STRUCT_IF_C Sf_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_C_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu15ll, Sf_C_BFu15ll)
//============================================================================


struct  Sf_C_BFu15s  {
  struct empty v1;
  char v2;
  unsigned short v3:15;
};
//SIG(1 Sf_C_BFu15s) C1{ FC2{} Fc Fs:15}



static void Test_Sf_C_BFu15s()
{
  {
    init_simple_test("Sf_C_BFu15s");
    static STRUCT_IF_C Sf_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu15s, Sf_C_BFu15s)
//============================================================================


struct  Sf_C_BFu16i  {
  struct empty v1;
  char v2;
  unsigned int v3:16;
};
//SIG(1 Sf_C_BFu16i) C1{ FC2{} Fc Fi:16}



static void Test_Sf_C_BFu16i()
{
  {
    init_simple_test("Sf_C_BFu16i");
    static STRUCT_IF_C Sf_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_C_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu16i, Sf_C_BFu16i)
//============================================================================


struct  Sf_C_BFu16ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_C_BFu16ll) C1{ FC2{} Fc FL:16}



static void Test_Sf_C_BFu16ll()
{
  {
    init_simple_test("Sf_C_BFu16ll");
    static STRUCT_IF_C Sf_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_C_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu16ll, Sf_C_BFu16ll)
//============================================================================


struct  Sf_C_BFu16s  {
  struct empty v1;
  char v2;
  unsigned short v3:16;
};
//SIG(1 Sf_C_BFu16s) C1{ FC2{} Fc Fs:16}



static void Test_Sf_C_BFu16s()
{
  {
    init_simple_test("Sf_C_BFu16s");
    static STRUCT_IF_C Sf_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu16s, Sf_C_BFu16s)
//============================================================================


struct  Sf_C_BFu17i  {
  struct empty v1;
  char v2;
  unsigned int v3:17;
};
//SIG(1 Sf_C_BFu17i) C1{ FC2{} Fc Fi:17}



static void Test_Sf_C_BFu17i()
{
  {
    init_simple_test("Sf_C_BFu17i");
    static STRUCT_IF_C Sf_C_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_C_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu17i, Sf_C_BFu17i)
//============================================================================


struct  Sf_C_BFu17ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_C_BFu17ll) C1{ FC2{} Fc FL:17}



static void Test_Sf_C_BFu17ll()
{
  {
    init_simple_test("Sf_C_BFu17ll");
    static STRUCT_IF_C Sf_C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_C_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu17ll, Sf_C_BFu17ll)
//============================================================================


struct  Sf_C_BFu1c  {
  struct empty v1;
  char v2;
  unsigned char v3:1;
};
//SIG(1 Sf_C_BFu1c) C1{ FC2{} Fc Fc:1}



static void Test_Sf_C_BFu1c()
{
  {
    init_simple_test("Sf_C_BFu1c");
    static STRUCT_IF_C Sf_C_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu1c, Sf_C_BFu1c)
//============================================================================


struct  Sf_C_BFu1i  {
  struct empty v1;
  char v2;
  unsigned int v3:1;
};
//SIG(1 Sf_C_BFu1i) C1{ FC2{} Fc Fi:1}



static void Test_Sf_C_BFu1i()
{
  {
    init_simple_test("Sf_C_BFu1i");
    static STRUCT_IF_C Sf_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu1i, Sf_C_BFu1i)
//============================================================================


struct  Sf_C_BFu1ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_C_BFu1ll) C1{ FC2{} Fc FL:1}



static void Test_Sf_C_BFu1ll()
{
  {
    init_simple_test("Sf_C_BFu1ll");
    static STRUCT_IF_C Sf_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu1ll, Sf_C_BFu1ll)
//============================================================================


struct  Sf_C_BFu1s  {
  struct empty v1;
  char v2;
  unsigned short v3:1;
};
//SIG(1 Sf_C_BFu1s) C1{ FC2{} Fc Fs:1}



static void Test_Sf_C_BFu1s()
{
  {
    init_simple_test("Sf_C_BFu1s");
    static STRUCT_IF_C Sf_C_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu1s, Sf_C_BFu1s)
//============================================================================


struct  Sf_C_BFu31i  {
  struct empty v1;
  char v2;
  unsigned int v3:31;
};
//SIG(1 Sf_C_BFu31i) C1{ FC2{} Fc Fi:31}



static void Test_Sf_C_BFu31i()
{
  {
    init_simple_test("Sf_C_BFu31i");
    static STRUCT_IF_C Sf_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu31i, Sf_C_BFu31i)
//============================================================================


struct  Sf_C_BFu31ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_C_BFu31ll) C1{ FC2{} Fc FL:31}



static void Test_Sf_C_BFu31ll()
{
  {
    init_simple_test("Sf_C_BFu31ll");
    static STRUCT_IF_C Sf_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_C_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu31ll, Sf_C_BFu31ll)
//============================================================================


struct  Sf_C_BFu32i  {
  struct empty v1;
  char v2;
  unsigned int v3:32;
};
//SIG(1 Sf_C_BFu32i) C1{ FC2{} Fc Fi:32}



static void Test_Sf_C_BFu32i()
{
  {
    init_simple_test("Sf_C_BFu32i");
    static STRUCT_IF_C Sf_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu32i, Sf_C_BFu32i)
//============================================================================


struct  Sf_C_BFu32ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_C_BFu32ll) C1{ FC2{} Fc FL:32}



static void Test_Sf_C_BFu32ll()
{
  {
    init_simple_test("Sf_C_BFu32ll");
    static STRUCT_IF_C Sf_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_C_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu32ll, Sf_C_BFu32ll)
//============================================================================


struct  Sf_C_BFu33  {
  struct empty v1;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_C_BFu33) C1{ FC2{} Fc FL:33}



static void Test_Sf_C_BFu33()
{
  {
    init_simple_test("Sf_C_BFu33");
    static STRUCT_IF_C Sf_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu33.v2");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_C_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu33, Sf_C_BFu33)
//============================================================================


struct  Sf_C_BFu7c  {
  struct empty v1;
  char v2;
  unsigned char v3:7;
};
//SIG(1 Sf_C_BFu7c) C1{ FC2{} Fc Fc:7}



static void Test_Sf_C_BFu7c()
{
  {
    init_simple_test("Sf_C_BFu7c");
    static STRUCT_IF_C Sf_C_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_C_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu7c, Sf_C_BFu7c)
//============================================================================


struct  Sf_C_BFu7i  {
  struct empty v1;
  char v2;
  unsigned int v3:7;
};
//SIG(1 Sf_C_BFu7i) C1{ FC2{} Fc Fi:7}



static void Test_Sf_C_BFu7i()
{
  {
    init_simple_test("Sf_C_BFu7i");
    static STRUCT_IF_C Sf_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_C_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu7i, Sf_C_BFu7i)
//============================================================================


struct  Sf_C_BFu7ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_C_BFu7ll) C1{ FC2{} Fc FL:7}



static void Test_Sf_C_BFu7ll()
{
  {
    init_simple_test("Sf_C_BFu7ll");
    static STRUCT_IF_C Sf_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_C_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu7ll, Sf_C_BFu7ll)
//============================================================================


struct  Sf_C_BFu7s  {
  struct empty v1;
  char v2;
  unsigned short v3:7;
};
//SIG(1 Sf_C_BFu7s) C1{ FC2{} Fc Fs:7}



static void Test_Sf_C_BFu7s()
{
  {
    init_simple_test("Sf_C_BFu7s");
    static STRUCT_IF_C Sf_C_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_C_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu7s, Sf_C_BFu7s)
//============================================================================


struct  Sf_C_BFu8c  {
  struct empty v1;
  char v2;
  unsigned char v3:8;
};
//SIG(1 Sf_C_BFu8c) C1{ FC2{} Fc Fc:8}



static void Test_Sf_C_BFu8c()
{
  {
    init_simple_test("Sf_C_BFu8c");
    static STRUCT_IF_C Sf_C_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_C_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu8c, Sf_C_BFu8c)
//============================================================================


struct  Sf_C_BFu8i  {
  struct empty v1;
  char v2;
  unsigned int v3:8;
};
//SIG(1 Sf_C_BFu8i) C1{ FC2{} Fc Fi:8}



static void Test_Sf_C_BFu8i()
{
  {
    init_simple_test("Sf_C_BFu8i");
    static STRUCT_IF_C Sf_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_C_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu8i, Sf_C_BFu8i)
//============================================================================


struct  Sf_C_BFu8ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_C_BFu8ll) C1{ FC2{} Fc FL:8}



static void Test_Sf_C_BFu8ll()
{
  {
    init_simple_test("Sf_C_BFu8ll");
    static STRUCT_IF_C Sf_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_C_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu8ll, Sf_C_BFu8ll)
//============================================================================


struct  Sf_C_BFu8s  {
  struct empty v1;
  char v2;
  unsigned short v3:8;
};
//SIG(1 Sf_C_BFu8s) C1{ FC2{} Fc Fs:8}



static void Test_Sf_C_BFu8s()
{
  {
    init_simple_test("Sf_C_BFu8s");
    static STRUCT_IF_C Sf_C_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_C_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu8s, Sf_C_BFu8s)
//============================================================================


struct  Sf_C_BFu9i  {
  struct empty v1;
  char v2;
  unsigned int v3:9;
};
//SIG(1 Sf_C_BFu9i) C1{ FC2{} Fc Fi:9}



static void Test_Sf_C_BFu9i()
{
  {
    init_simple_test("Sf_C_BFu9i");
    static STRUCT_IF_C Sf_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_C_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu9i, Sf_C_BFu9i)
//============================================================================


struct  Sf_C_BFu9ll  {
  struct empty v1;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_C_BFu9ll) C1{ FC2{} Fc FL:9}



static void Test_Sf_C_BFu9ll()
{
  {
    init_simple_test("Sf_C_BFu9ll");
    static STRUCT_IF_C Sf_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_C_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu9ll, Sf_C_BFu9ll)
//============================================================================


struct  Sf_C_BFu9s  {
  struct empty v1;
  char v2;
  unsigned short v3:9;
};
//SIG(1 Sf_C_BFu9s) C1{ FC2{} Fc Fs:9}



static void Test_Sf_C_BFu9s()
{
  {
    init_simple_test("Sf_C_BFu9s");
    static STRUCT_IF_C Sf_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_C_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_BFu9s, Sf_C_BFu9s)
//============================================================================


struct  Sf_C_C  {
  struct empty v1;
  char v2;
  char v3;
};
//SIG(1 Sf_C_C) C1{ FC2{} Fc[2]}



static void Test_Sf_C_C()
{
  {
    init_simple_test("Sf_C_C");
    STRUCT_IF_C Sf_C_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_C)");
    check_field_offset(lv, v1, 0, "Sf_C_C.v1");
    check_field_offset(lv, v2, 0, "Sf_C_C.v2");
    check_field_offset(lv, v3, 1, "Sf_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_C, Sf_C_C)
//============================================================================


struct  Sf_C_D  {
  struct empty v1;
  char v2;
  double v3;
};
//SIG(1 Sf_C_D) C1{ FC2{} Fc FL}



static void Test_Sf_C_D()
{
  {
    init_simple_test("Sf_C_D");
    STRUCT_IF_C Sf_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_D)");
    check_field_offset(lv, v1, 0, "Sf_C_D.v1");
    check_field_offset(lv, v2, 0, "Sf_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_D, Sf_C_D)
//============================================================================


struct  Sf_C_F  {
  struct empty v1;
  char v2;
  float v3;
};
//SIG(1 Sf_C_F) C1{ FC2{} Fc Fi}



static void Test_Sf_C_F()
{
  {
    init_simple_test("Sf_C_F");
    STRUCT_IF_C Sf_C_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_F)");
    check_field_offset(lv, v1, 0, "Sf_C_F.v1");
    check_field_offset(lv, v2, 0, "Sf_C_F.v2");
    check_field_offset(lv, v3, 4, "Sf_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_F, Sf_C_F)
//============================================================================


struct  Sf_C_I  {
  struct empty v1;
  char v2;
  int v3;
};
//SIG(1 Sf_C_I) C1{ FC2{} Fc Fi}



static void Test_Sf_C_I()
{
  {
    init_simple_test("Sf_C_I");
    STRUCT_IF_C Sf_C_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_I)");
    check_field_offset(lv, v1, 0, "Sf_C_I.v1");
    check_field_offset(lv, v2, 0, "Sf_C_I.v2");
    check_field_offset(lv, v3, 4, "Sf_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_I, Sf_C_I)
//============================================================================


struct  Sf_C_Ip  {
  struct empty v1;
  char v2;
  int *v3;
};
//SIG(1 Sf_C_Ip) C1{ FC2{} Fc Fp}



static void Test_Sf_C_Ip()
{
  {
    init_simple_test("Sf_C_Ip");
    STRUCT_IF_C Sf_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_Ip)");
    check_field_offset(lv, v1, 0, "Sf_C_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Ip, Sf_C_Ip)
//============================================================================


struct  Sf_C_L  {
  struct empty v1;
  char v2;
  __tsi64 v3;
};
//SIG(1 Sf_C_L) C1{ FC2{} Fc FL}



static void Test_Sf_C_L()
{
  {
    init_simple_test("Sf_C_L");
    STRUCT_IF_C Sf_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_L)");
    check_field_offset(lv, v1, 0, "Sf_C_L.v1");
    check_field_offset(lv, v2, 0, "Sf_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_L, Sf_C_L)
//============================================================================


struct  Sf_C_S  {
  struct empty v1;
  char v2;
  short v3;
};
//SIG(1 Sf_C_S) C1{ FC2{} Fc Fs}



static void Test_Sf_C_S()
{
  {
    init_simple_test("Sf_C_S");
    STRUCT_IF_C Sf_C_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_S)");
    check_field_offset(lv, v1, 0, "Sf_C_S.v1");
    check_field_offset(lv, v2, 0, "Sf_C_S.v2");
    check_field_offset(lv, v3, 2, "Sf_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_S, Sf_C_S)
//============================================================================


struct  Sf_C_Sf  {
  struct empty v1;
  char v2;
  struct empty v3;
};
//SIG(1 Sf_C_Sf) C1{ FC2{} Fc FC2}



static void Test_Sf_C_Sf()
{
  {
    init_simple_test("Sf_C_Sf");
    STRUCT_IF_C Sf_C_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Sf_C_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_Sf)");
    check_field_offset(lv, v1, 0, "Sf_C_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Sf.v2");
    check_field_offset(lv, v3, 1, "Sf_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Sf, Sf_C_Sf)
//============================================================================


struct  Sf_C_Uc  {
  struct empty v1;
  char v2;
  unsigned char v3;
};
//SIG(1 Sf_C_Uc) C1{ FC2{} Fc[2]}



static void Test_Sf_C_Uc()
{
  {
    init_simple_test("Sf_C_Uc");
    STRUCT_IF_C Sf_C_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_C_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_C_Uc)");
    check_field_offset(lv, v1, 0, "Sf_C_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Uc.v2");
    check_field_offset(lv, v3, 1, "Sf_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Uc, Sf_C_Uc)
//============================================================================


struct  Sf_C_Ui  {
  struct empty v1;
  char v2;
  unsigned int v3;
};
//SIG(1 Sf_C_Ui) C1{ FC2{} Fc Fi}



static void Test_Sf_C_Ui()
{
  {
    init_simple_test("Sf_C_Ui");
    STRUCT_IF_C Sf_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_C_Ui)");
    check_field_offset(lv, v1, 0, "Sf_C_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Ui, Sf_C_Ui)
//============================================================================


struct  Sf_C_Ul  {
  struct empty v1;
  char v2;
  __tsu64 v3;
};
//SIG(1 Sf_C_Ul) C1{ FC2{} Fc FL}



static void Test_Sf_C_Ul()
{
  {
    init_simple_test("Sf_C_Ul");
    STRUCT_IF_C Sf_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_Ul)");
    check_field_offset(lv, v1, 0, "Sf_C_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Ul, Sf_C_Ul)
//============================================================================


struct  Sf_C_Us  {
  struct empty v1;
  char v2;
  unsigned short v3;
};
//SIG(1 Sf_C_Us) C1{ FC2{} Fc Fs}



static void Test_Sf_C_Us()
{
  {
    init_simple_test("Sf_C_Us");
    STRUCT_IF_C Sf_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_C_Us)");
    check_field_offset(lv, v1, 0, "Sf_C_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Us, Sf_C_Us)
//============================================================================


struct  Sf_C_Vp  {
  struct empty v1;
  char v2;
  void *v3;
};
//SIG(1 Sf_C_Vp) C1{ FC2{} Fc Fp}



static void Test_Sf_C_Vp()
{
  {
    init_simple_test("Sf_C_Vp");
    STRUCT_IF_C Sf_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_C_Vp)");
    check_field_offset(lv, v1, 0, "Sf_C_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_C_Vp, Sf_C_Vp)
//============================================================================


struct  Sf_D  {
  struct empty v1;
  double v2;
};
//SIG(1 Sf_D) C1{ FC2{} FL}



static void Test_Sf_D()
{
  {
    init_simple_test("Sf_D");
    STRUCT_IF_C Sf_D lv;
    check2(sizeof(lv), 8, "sizeof(Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D)");
    check_field_offset(lv, v1, 0, "Sf_D.v1");
    check_field_offset(lv, v2, 0, "Sf_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D, Sf_D)
//============================================================================


struct  Sf_D_BFu15i  {
  struct empty v1;
  double v2;
  unsigned int v3:15;
};
//SIG(1 Sf_D_BFu15i) C1{ FC2{} FL Fi:15}



static void Test_Sf_D_BFu15i()
{
  {
    init_simple_test("Sf_D_BFu15i");
    static STRUCT_IF_C Sf_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_D_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu15i, Sf_D_BFu15i)
//============================================================================


struct  Sf_D_BFu15ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_D_BFu15ll) C1{ FC2{} FL FL:15}



static void Test_Sf_D_BFu15ll()
{
  {
    init_simple_test("Sf_D_BFu15ll");
    static STRUCT_IF_C Sf_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_D_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu15ll, Sf_D_BFu15ll)
//============================================================================


struct  Sf_D_BFu15s  {
  struct empty v1;
  double v2;
  unsigned short v3:15;
};
//SIG(1 Sf_D_BFu15s) C1{ FC2{} FL Fs:15}



static void Test_Sf_D_BFu15s()
{
  {
    init_simple_test("Sf_D_BFu15s");
    static STRUCT_IF_C Sf_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_D_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu15s, Sf_D_BFu15s)
//============================================================================


struct  Sf_D_BFu16i  {
  struct empty v1;
  double v2;
  unsigned int v3:16;
};
//SIG(1 Sf_D_BFu16i) C1{ FC2{} FL Fi:16}



static void Test_Sf_D_BFu16i()
{
  {
    init_simple_test("Sf_D_BFu16i");
    static STRUCT_IF_C Sf_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_D_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu16i, Sf_D_BFu16i)
//============================================================================


struct  Sf_D_BFu16ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_D_BFu16ll) C1{ FC2{} FL FL:16}



static void Test_Sf_D_BFu16ll()
{
  {
    init_simple_test("Sf_D_BFu16ll");
    static STRUCT_IF_C Sf_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_D_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu16ll, Sf_D_BFu16ll)
//============================================================================


struct  Sf_D_BFu16s  {
  struct empty v1;
  double v2;
  unsigned short v3:16;
};
//SIG(1 Sf_D_BFu16s) C1{ FC2{} FL Fs:16}



static void Test_Sf_D_BFu16s()
{
  {
    init_simple_test("Sf_D_BFu16s");
    static STRUCT_IF_C Sf_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_D_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu16s, Sf_D_BFu16s)
//============================================================================


struct  Sf_D_BFu17i  {
  struct empty v1;
  double v2;
  unsigned int v3:17;
};
//SIG(1 Sf_D_BFu17i) C1{ FC2{} FL Fi:17}



static void Test_Sf_D_BFu17i()
{
  {
    init_simple_test("Sf_D_BFu17i");
    static STRUCT_IF_C Sf_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_D_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu17i, Sf_D_BFu17i)
//============================================================================


struct  Sf_D_BFu17ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_D_BFu17ll) C1{ FC2{} FL FL:17}



static void Test_Sf_D_BFu17ll()
{
  {
    init_simple_test("Sf_D_BFu17ll");
    static STRUCT_IF_C Sf_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_D_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu17ll, Sf_D_BFu17ll)
//============================================================================


struct  Sf_D_BFu1c  {
  struct empty v1;
  double v2;
  unsigned char v3:1;
};
//SIG(1 Sf_D_BFu1c) C1{ FC2{} FL Fc:1}



static void Test_Sf_D_BFu1c()
{
  {
    init_simple_test("Sf_D_BFu1c");
    static STRUCT_IF_C Sf_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu1c, Sf_D_BFu1c)
//============================================================================


struct  Sf_D_BFu1i  {
  struct empty v1;
  double v2;
  unsigned int v3:1;
};
//SIG(1 Sf_D_BFu1i) C1{ FC2{} FL Fi:1}



static void Test_Sf_D_BFu1i()
{
  {
    init_simple_test("Sf_D_BFu1i");
    static STRUCT_IF_C Sf_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu1i, Sf_D_BFu1i)
//============================================================================


struct  Sf_D_BFu1ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_D_BFu1ll) C1{ FC2{} FL FL:1}



static void Test_Sf_D_BFu1ll()
{
  {
    init_simple_test("Sf_D_BFu1ll");
    static STRUCT_IF_C Sf_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu1ll, Sf_D_BFu1ll)
//============================================================================


struct  Sf_D_BFu1s  {
  struct empty v1;
  double v2;
  unsigned short v3:1;
};
//SIG(1 Sf_D_BFu1s) C1{ FC2{} FL Fs:1}



static void Test_Sf_D_BFu1s()
{
  {
    init_simple_test("Sf_D_BFu1s");
    static STRUCT_IF_C Sf_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu1s, Sf_D_BFu1s)
//============================================================================


struct  Sf_D_BFu31i  {
  struct empty v1;
  double v2;
  unsigned int v3:31;
};
//SIG(1 Sf_D_BFu31i) C1{ FC2{} FL Fi:31}



static void Test_Sf_D_BFu31i()
{
  {
    init_simple_test("Sf_D_BFu31i");
    static STRUCT_IF_C Sf_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_D_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu31i, Sf_D_BFu31i)
//============================================================================


struct  Sf_D_BFu31ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_D_BFu31ll) C1{ FC2{} FL FL:31}



static void Test_Sf_D_BFu31ll()
{
  {
    init_simple_test("Sf_D_BFu31ll");
    static STRUCT_IF_C Sf_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_D_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu31ll, Sf_D_BFu31ll)
//============================================================================


struct  Sf_D_BFu32i  {
  struct empty v1;
  double v2;
  unsigned int v3:32;
};
//SIG(1 Sf_D_BFu32i) C1{ FC2{} FL Fi:32}



static void Test_Sf_D_BFu32i()
{
  {
    init_simple_test("Sf_D_BFu32i");
    static STRUCT_IF_C Sf_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_D_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu32i, Sf_D_BFu32i)
//============================================================================


struct  Sf_D_BFu32ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_D_BFu32ll) C1{ FC2{} FL FL:32}



static void Test_Sf_D_BFu32ll()
{
  {
    init_simple_test("Sf_D_BFu32ll");
    static STRUCT_IF_C Sf_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_D_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu32ll, Sf_D_BFu32ll)
//============================================================================


struct  Sf_D_BFu33  {
  struct empty v1;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_D_BFu33) C1{ FC2{} FL FL:33}



static void Test_Sf_D_BFu33()
{
  {
    init_simple_test("Sf_D_BFu33");
    static STRUCT_IF_C Sf_D_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Sf_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_D_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu33, Sf_D_BFu33)
//============================================================================


struct  Sf_D_BFu7c  {
  struct empty v1;
  double v2;
  unsigned char v3:7;
};
//SIG(1 Sf_D_BFu7c) C1{ FC2{} FL Fc:7}



static void Test_Sf_D_BFu7c()
{
  {
    init_simple_test("Sf_D_BFu7c");
    static STRUCT_IF_C Sf_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_D_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu7c, Sf_D_BFu7c)
//============================================================================


struct  Sf_D_BFu7i  {
  struct empty v1;
  double v2;
  unsigned int v3:7;
};
//SIG(1 Sf_D_BFu7i) C1{ FC2{} FL Fi:7}



static void Test_Sf_D_BFu7i()
{
  {
    init_simple_test("Sf_D_BFu7i");
    static STRUCT_IF_C Sf_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_D_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu7i, Sf_D_BFu7i)
//============================================================================


struct  Sf_D_BFu7ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_D_BFu7ll) C1{ FC2{} FL FL:7}



static void Test_Sf_D_BFu7ll()
{
  {
    init_simple_test("Sf_D_BFu7ll");
    static STRUCT_IF_C Sf_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_D_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu7ll, Sf_D_BFu7ll)
//============================================================================


struct  Sf_D_BFu7s  {
  struct empty v1;
  double v2;
  unsigned short v3:7;
};
//SIG(1 Sf_D_BFu7s) C1{ FC2{} FL Fs:7}



static void Test_Sf_D_BFu7s()
{
  {
    init_simple_test("Sf_D_BFu7s");
    static STRUCT_IF_C Sf_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_D_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu7s, Sf_D_BFu7s)
//============================================================================


struct  Sf_D_BFu8c  {
  struct empty v1;
  double v2;
  unsigned char v3:8;
};
//SIG(1 Sf_D_BFu8c) C1{ FC2{} FL Fc:8}



static void Test_Sf_D_BFu8c()
{
  {
    init_simple_test("Sf_D_BFu8c");
    static STRUCT_IF_C Sf_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_D_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu8c, Sf_D_BFu8c)
//============================================================================


struct  Sf_D_BFu8i  {
  struct empty v1;
  double v2;
  unsigned int v3:8;
};
//SIG(1 Sf_D_BFu8i) C1{ FC2{} FL Fi:8}



static void Test_Sf_D_BFu8i()
{
  {
    init_simple_test("Sf_D_BFu8i");
    static STRUCT_IF_C Sf_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_D_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu8i, Sf_D_BFu8i)
//============================================================================


struct  Sf_D_BFu8ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_D_BFu8ll) C1{ FC2{} FL FL:8}



static void Test_Sf_D_BFu8ll()
{
  {
    init_simple_test("Sf_D_BFu8ll");
    static STRUCT_IF_C Sf_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_D_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu8ll, Sf_D_BFu8ll)
//============================================================================


struct  Sf_D_BFu8s  {
  struct empty v1;
  double v2;
  unsigned short v3:8;
};
//SIG(1 Sf_D_BFu8s) C1{ FC2{} FL Fs:8}



static void Test_Sf_D_BFu8s()
{
  {
    init_simple_test("Sf_D_BFu8s");
    static STRUCT_IF_C Sf_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_D_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu8s, Sf_D_BFu8s)
//============================================================================


struct  Sf_D_BFu9i  {
  struct empty v1;
  double v2;
  unsigned int v3:9;
};
//SIG(1 Sf_D_BFu9i) C1{ FC2{} FL Fi:9}



static void Test_Sf_D_BFu9i()
{
  {
    init_simple_test("Sf_D_BFu9i");
    static STRUCT_IF_C Sf_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_D_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu9i, Sf_D_BFu9i)
//============================================================================


struct  Sf_D_BFu9ll  {
  struct empty v1;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_D_BFu9ll) C1{ FC2{} FL FL:9}



static void Test_Sf_D_BFu9ll()
{
  {
    init_simple_test("Sf_D_BFu9ll");
    static STRUCT_IF_C Sf_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_D_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu9ll, Sf_D_BFu9ll)
//============================================================================


struct  Sf_D_BFu9s  {
  struct empty v1;
  double v2;
  unsigned short v3:9;
};
//SIG(1 Sf_D_BFu9s) C1{ FC2{} FL Fs:9}



static void Test_Sf_D_BFu9s()
{
  {
    init_simple_test("Sf_D_BFu9s");
    static STRUCT_IF_C Sf_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_D_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_D_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_D_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_BFu9s, Sf_D_BFu9s)
//============================================================================


struct  Sf_D_C  {
  struct empty v1;
  double v2;
  char v3;
};
//SIG(1 Sf_D_C) C1{ FC2{} FL Fc}



static void Test_Sf_D_C()
{
  {
    init_simple_test("Sf_D_C");
    STRUCT_IF_C Sf_D_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_C)");
    check_field_offset(lv, v1, 0, "Sf_D_C.v1");
    check_field_offset(lv, v2, 0, "Sf_D_C.v2");
    check_field_offset(lv, v3, 8, "Sf_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_C, Sf_D_C)
//============================================================================


struct  Sf_D_D  {
  struct empty v1;
  double v2;
  double v3;
};
//SIG(1 Sf_D_D) C1{ FC2{} FL[2]}



static void Test_Sf_D_D()
{
  {
    init_simple_test("Sf_D_D");
    STRUCT_IF_C Sf_D_D lv;
    check2(sizeof(lv), 16, "sizeof(Sf_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_D)");
    check_field_offset(lv, v1, 0, "Sf_D_D.v1");
    check_field_offset(lv, v2, 0, "Sf_D_D.v2");
    check_field_offset(lv, v3, 8, "Sf_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_D, Sf_D_D)
//============================================================================


struct  Sf_D_F  {
  struct empty v1;
  double v2;
  float v3;
};
//SIG(1 Sf_D_F) C1{ FC2{} FL Fi}



static void Test_Sf_D_F()
{
  {
    init_simple_test("Sf_D_F");
    STRUCT_IF_C Sf_D_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_F)");
    check_field_offset(lv, v1, 0, "Sf_D_F.v1");
    check_field_offset(lv, v2, 0, "Sf_D_F.v2");
    check_field_offset(lv, v3, 8, "Sf_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_F, Sf_D_F)
//============================================================================


struct  Sf_D_I  {
  struct empty v1;
  double v2;
  int v3;
};
//SIG(1 Sf_D_I) C1{ FC2{} FL Fi}



static void Test_Sf_D_I()
{
  {
    init_simple_test("Sf_D_I");
    STRUCT_IF_C Sf_D_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_I)");
    check_field_offset(lv, v1, 0, "Sf_D_I.v1");
    check_field_offset(lv, v2, 0, "Sf_D_I.v2");
    check_field_offset(lv, v3, 8, "Sf_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_I, Sf_D_I)
//============================================================================


struct  Sf_D_Ip  {
  struct empty v1;
  double v2;
  int *v3;
};
//SIG(1 Sf_D_Ip) C1{ FC2{} FL Fp}



static void Test_Sf_D_Ip()
{
  {
    init_simple_test("Sf_D_Ip");
    STRUCT_IF_C Sf_D_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Ip)");
    check_field_offset(lv, v1, 0, "Sf_D_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Ip, Sf_D_Ip)
//============================================================================


struct  Sf_D_L  {
  struct empty v1;
  double v2;
  __tsi64 v3;
};
//SIG(1 Sf_D_L) C1{ FC2{} FL[2]}



static void Test_Sf_D_L()
{
  {
    init_simple_test("Sf_D_L");
    STRUCT_IF_C Sf_D_L lv;
    check2(sizeof(lv), 16, "sizeof(Sf_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_L)");
    check_field_offset(lv, v1, 0, "Sf_D_L.v1");
    check_field_offset(lv, v2, 0, "Sf_D_L.v2");
    check_field_offset(lv, v3, 8, "Sf_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_L, Sf_D_L)
//============================================================================


struct  Sf_D_S  {
  struct empty v1;
  double v2;
  short v3;
};
//SIG(1 Sf_D_S) C1{ FC2{} FL Fs}



static void Test_Sf_D_S()
{
  {
    init_simple_test("Sf_D_S");
    STRUCT_IF_C Sf_D_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_S)");
    check_field_offset(lv, v1, 0, "Sf_D_S.v1");
    check_field_offset(lv, v2, 0, "Sf_D_S.v2");
    check_field_offset(lv, v3, 8, "Sf_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_S, Sf_D_S)
//============================================================================


struct  Sf_D_Sf  {
  struct empty v1;
  double v2;
  struct empty v3;
};
//SIG(1 Sf_D_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_D_Sf()
{
  {
    init_simple_test("Sf_D_Sf");
    STRUCT_IF_C Sf_D_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Sf_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Sf)");
    check_field_offset(lv, v1, 0, "Sf_D_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Sf, Sf_D_Sf)
//============================================================================


struct  Sf_D_Uc  {
  struct empty v1;
  double v2;
  unsigned char v3;
};
//SIG(1 Sf_D_Uc) C1{ FC2{} FL Fc}



static void Test_Sf_D_Uc()
{
  {
    init_simple_test("Sf_D_Uc");
    STRUCT_IF_C Sf_D_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Uc)");
    check_field_offset(lv, v1, 0, "Sf_D_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Uc, Sf_D_Uc)
//============================================================================


struct  Sf_D_Ui  {
  struct empty v1;
  double v2;
  unsigned int v3;
};
//SIG(1 Sf_D_Ui) C1{ FC2{} FL Fi}



static void Test_Sf_D_Ui()
{
  {
    init_simple_test("Sf_D_Ui");
    STRUCT_IF_C Sf_D_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Ui)");
    check_field_offset(lv, v1, 0, "Sf_D_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Ui, Sf_D_Ui)
//============================================================================


struct  Sf_D_Ul  {
  struct empty v1;
  double v2;
  __tsu64 v3;
};
//SIG(1 Sf_D_Ul) C1{ FC2{} FL[2]}



static void Test_Sf_D_Ul()
{
  {
    init_simple_test("Sf_D_Ul");
    STRUCT_IF_C Sf_D_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Sf_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Ul)");
    check_field_offset(lv, v1, 0, "Sf_D_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Ul, Sf_D_Ul)
//============================================================================


struct  Sf_D_Us  {
  struct empty v1;
  double v2;
  unsigned short v3;
};
//SIG(1 Sf_D_Us) C1{ FC2{} FL Fs}



static void Test_Sf_D_Us()
{
  {
    init_simple_test("Sf_D_Us");
    STRUCT_IF_C Sf_D_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Us)");
    check_field_offset(lv, v1, 0, "Sf_D_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Us, Sf_D_Us)
//============================================================================


struct  Sf_D_Vp  {
  struct empty v1;
  double v2;
  void *v3;
};
//SIG(1 Sf_D_Vp) C1{ FC2{} FL Fp}



static void Test_Sf_D_Vp()
{
  {
    init_simple_test("Sf_D_Vp");
    STRUCT_IF_C Sf_D_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_D_Vp)");
    check_field_offset(lv, v1, 0, "Sf_D_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_D_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_D_Vp, Sf_D_Vp)
//============================================================================


struct  Sf_F  {
  struct empty v1;
  float v2;
};
//SIG(1 Sf_F) C1{ FC2{} Fi}



static void Test_Sf_F()
{
  {
    init_simple_test("Sf_F");
    STRUCT_IF_C Sf_F lv;
    check2(sizeof(lv), 4, "sizeof(Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F)");
    check_field_offset(lv, v1, 0, "Sf_F.v1");
    check_field_offset(lv, v2, 0, "Sf_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F, Sf_F)
//============================================================================


struct  Sf_F_BFu15i  {
  struct empty v1;
  float v2;
  unsigned int v3:15;
};
//SIG(1 Sf_F_BFu15i) C1{ FC2{} Fi Fi:15}



static void Test_Sf_F_BFu15i()
{
  {
    init_simple_test("Sf_F_BFu15i");
    static STRUCT_IF_C Sf_F_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_F_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu15i, Sf_F_BFu15i)
//============================================================================


struct  Sf_F_BFu15ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_F_BFu15ll) C1{ FC2{} Fi FL:15}



static void Test_Sf_F_BFu15ll()
{
  {
    init_simple_test("Sf_F_BFu15ll");
    static STRUCT_IF_C Sf_F_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_F_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu15ll, Sf_F_BFu15ll)
//============================================================================


struct  Sf_F_BFu15s  {
  struct empty v1;
  float v2;
  unsigned short v3:15;
};
//SIG(1 Sf_F_BFu15s) C1{ FC2{} Fi Fs:15}



static void Test_Sf_F_BFu15s()
{
  {
    init_simple_test("Sf_F_BFu15s");
    static STRUCT_IF_C Sf_F_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_F_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu15s, Sf_F_BFu15s)
//============================================================================


struct  Sf_F_BFu16i  {
  struct empty v1;
  float v2;
  unsigned int v3:16;
};
//SIG(1 Sf_F_BFu16i) C1{ FC2{} Fi Fi:16}



static void Test_Sf_F_BFu16i()
{
  {
    init_simple_test("Sf_F_BFu16i");
    static STRUCT_IF_C Sf_F_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_F_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu16i, Sf_F_BFu16i)
//============================================================================


struct  Sf_F_BFu16ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_F_BFu16ll) C1{ FC2{} Fi FL:16}



static void Test_Sf_F_BFu16ll()
{
  {
    init_simple_test("Sf_F_BFu16ll");
    static STRUCT_IF_C Sf_F_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_F_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu16ll, Sf_F_BFu16ll)
//============================================================================


struct  Sf_F_BFu16s  {
  struct empty v1;
  float v2;
  unsigned short v3:16;
};
//SIG(1 Sf_F_BFu16s) C1{ FC2{} Fi Fs:16}



static void Test_Sf_F_BFu16s()
{
  {
    init_simple_test("Sf_F_BFu16s");
    static STRUCT_IF_C Sf_F_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_F_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu16s, Sf_F_BFu16s)
//============================================================================


struct  Sf_F_BFu17i  {
  struct empty v1;
  float v2;
  unsigned int v3:17;
};
//SIG(1 Sf_F_BFu17i) C1{ FC2{} Fi Fi:17}



static void Test_Sf_F_BFu17i()
{
  {
    init_simple_test("Sf_F_BFu17i");
    static STRUCT_IF_C Sf_F_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_F_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu17i, Sf_F_BFu17i)
//============================================================================


struct  Sf_F_BFu17ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_F_BFu17ll) C1{ FC2{} Fi FL:17}



static void Test_Sf_F_BFu17ll()
{
  {
    init_simple_test("Sf_F_BFu17ll");
    static STRUCT_IF_C Sf_F_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_F_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu17ll, Sf_F_BFu17ll)
//============================================================================


struct  Sf_F_BFu1c  {
  struct empty v1;
  float v2;
  unsigned char v3:1;
};
//SIG(1 Sf_F_BFu1c) C1{ FC2{} Fi Fc:1}



static void Test_Sf_F_BFu1c()
{
  {
    init_simple_test("Sf_F_BFu1c");
    static STRUCT_IF_C Sf_F_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu1c, Sf_F_BFu1c)
//============================================================================


struct  Sf_F_BFu1i  {
  struct empty v1;
  float v2;
  unsigned int v3:1;
};
//SIG(1 Sf_F_BFu1i) C1{ FC2{} Fi Fi:1}



static void Test_Sf_F_BFu1i()
{
  {
    init_simple_test("Sf_F_BFu1i");
    static STRUCT_IF_C Sf_F_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu1i, Sf_F_BFu1i)
//============================================================================


struct  Sf_F_BFu1ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_F_BFu1ll) C1{ FC2{} Fi FL:1}



static void Test_Sf_F_BFu1ll()
{
  {
    init_simple_test("Sf_F_BFu1ll");
    static STRUCT_IF_C Sf_F_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu1ll, Sf_F_BFu1ll)
//============================================================================


struct  Sf_F_BFu1s  {
  struct empty v1;
  float v2;
  unsigned short v3:1;
};
//SIG(1 Sf_F_BFu1s) C1{ FC2{} Fi Fs:1}



static void Test_Sf_F_BFu1s()
{
  {
    init_simple_test("Sf_F_BFu1s");
    static STRUCT_IF_C Sf_F_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu1s, Sf_F_BFu1s)
//============================================================================


struct  Sf_F_BFu31i  {
  struct empty v1;
  float v2;
  unsigned int v3:31;
};
//SIG(1 Sf_F_BFu31i) C1{ FC2{} Fi Fi:31}



static void Test_Sf_F_BFu31i()
{
  {
    init_simple_test("Sf_F_BFu31i");
    static STRUCT_IF_C Sf_F_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_F_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu31i, Sf_F_BFu31i)
//============================================================================


struct  Sf_F_BFu31ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_F_BFu31ll) C1{ FC2{} Fi FL:31}



static void Test_Sf_F_BFu31ll()
{
  {
    init_simple_test("Sf_F_BFu31ll");
    static STRUCT_IF_C Sf_F_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_F_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu31ll, Sf_F_BFu31ll)
//============================================================================


struct  Sf_F_BFu32i  {
  struct empty v1;
  float v2;
  unsigned int v3:32;
};
//SIG(1 Sf_F_BFu32i) C1{ FC2{} Fi Fi:32}



static void Test_Sf_F_BFu32i()
{
  {
    init_simple_test("Sf_F_BFu32i");
    static STRUCT_IF_C Sf_F_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_F_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu32i, Sf_F_BFu32i)
//============================================================================


struct  Sf_F_BFu32ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_F_BFu32ll) C1{ FC2{} Fi FL:32}



static void Test_Sf_F_BFu32ll()
{
  {
    init_simple_test("Sf_F_BFu32ll");
    static STRUCT_IF_C Sf_F_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_F_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu32ll, Sf_F_BFu32ll)
//============================================================================


struct  Sf_F_BFu33  {
  struct empty v1;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_F_BFu33) C1{ FC2{} Fi FL:33}



static void Test_Sf_F_BFu33()
{
  {
    init_simple_test("Sf_F_BFu33");
    static STRUCT_IF_C Sf_F_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_F_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu33, Sf_F_BFu33)
//============================================================================


struct  Sf_F_BFu7c  {
  struct empty v1;
  float v2;
  unsigned char v3:7;
};
//SIG(1 Sf_F_BFu7c) C1{ FC2{} Fi Fc:7}



static void Test_Sf_F_BFu7c()
{
  {
    init_simple_test("Sf_F_BFu7c");
    static STRUCT_IF_C Sf_F_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_F_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu7c, Sf_F_BFu7c)
//============================================================================


struct  Sf_F_BFu7i  {
  struct empty v1;
  float v2;
  unsigned int v3:7;
};
//SIG(1 Sf_F_BFu7i) C1{ FC2{} Fi Fi:7}



static void Test_Sf_F_BFu7i()
{
  {
    init_simple_test("Sf_F_BFu7i");
    static STRUCT_IF_C Sf_F_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_F_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu7i, Sf_F_BFu7i)
//============================================================================


struct  Sf_F_BFu7ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_F_BFu7ll) C1{ FC2{} Fi FL:7}



static void Test_Sf_F_BFu7ll()
{
  {
    init_simple_test("Sf_F_BFu7ll");
    static STRUCT_IF_C Sf_F_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_F_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu7ll, Sf_F_BFu7ll)
//============================================================================


struct  Sf_F_BFu7s  {
  struct empty v1;
  float v2;
  unsigned short v3:7;
};
//SIG(1 Sf_F_BFu7s) C1{ FC2{} Fi Fs:7}



static void Test_Sf_F_BFu7s()
{
  {
    init_simple_test("Sf_F_BFu7s");
    static STRUCT_IF_C Sf_F_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_F_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu7s, Sf_F_BFu7s)
//============================================================================


struct  Sf_F_BFu8c  {
  struct empty v1;
  float v2;
  unsigned char v3:8;
};
//SIG(1 Sf_F_BFu8c) C1{ FC2{} Fi Fc:8}



static void Test_Sf_F_BFu8c()
{
  {
    init_simple_test("Sf_F_BFu8c");
    static STRUCT_IF_C Sf_F_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_F_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu8c, Sf_F_BFu8c)
//============================================================================


struct  Sf_F_BFu8i  {
  struct empty v1;
  float v2;
  unsigned int v3:8;
};
//SIG(1 Sf_F_BFu8i) C1{ FC2{} Fi Fi:8}



static void Test_Sf_F_BFu8i()
{
  {
    init_simple_test("Sf_F_BFu8i");
    static STRUCT_IF_C Sf_F_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_F_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu8i, Sf_F_BFu8i)
//============================================================================


struct  Sf_F_BFu8ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_F_BFu8ll) C1{ FC2{} Fi FL:8}



static void Test_Sf_F_BFu8ll()
{
  {
    init_simple_test("Sf_F_BFu8ll");
    static STRUCT_IF_C Sf_F_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_F_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu8ll, Sf_F_BFu8ll)
//============================================================================


struct  Sf_F_BFu8s  {
  struct empty v1;
  float v2;
  unsigned short v3:8;
};
//SIG(1 Sf_F_BFu8s) C1{ FC2{} Fi Fs:8}



static void Test_Sf_F_BFu8s()
{
  {
    init_simple_test("Sf_F_BFu8s");
    static STRUCT_IF_C Sf_F_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_F_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu8s, Sf_F_BFu8s)
//============================================================================


struct  Sf_F_BFu9i  {
  struct empty v1;
  float v2;
  unsigned int v3:9;
};
//SIG(1 Sf_F_BFu9i) C1{ FC2{} Fi Fi:9}



static void Test_Sf_F_BFu9i()
{
  {
    init_simple_test("Sf_F_BFu9i");
    static STRUCT_IF_C Sf_F_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_F_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu9i, Sf_F_BFu9i)
//============================================================================


struct  Sf_F_BFu9ll  {
  struct empty v1;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_F_BFu9ll) C1{ FC2{} Fi FL:9}



static void Test_Sf_F_BFu9ll()
{
  {
    init_simple_test("Sf_F_BFu9ll");
    static STRUCT_IF_C Sf_F_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_F_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu9ll, Sf_F_BFu9ll)
//============================================================================


struct  Sf_F_BFu9s  {
  struct empty v1;
  float v2;
  unsigned short v3:9;
};
//SIG(1 Sf_F_BFu9s) C1{ FC2{} Fi Fs:9}



static void Test_Sf_F_BFu9s()
{
  {
    init_simple_test("Sf_F_BFu9s");
    static STRUCT_IF_C Sf_F_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_F_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_F_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_BFu9s, Sf_F_BFu9s)
//============================================================================


struct  Sf_F_C  {
  struct empty v1;
  float v2;
  char v3;
};
//SIG(1 Sf_F_C) C1{ FC2{} Fi Fc}



static void Test_Sf_F_C()
{
  {
    init_simple_test("Sf_F_C");
    STRUCT_IF_C Sf_F_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_C)");
    check_field_offset(lv, v1, 0, "Sf_F_C.v1");
    check_field_offset(lv, v2, 0, "Sf_F_C.v2");
    check_field_offset(lv, v3, 4, "Sf_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_C, Sf_F_C)
//============================================================================


struct  Sf_F_D  {
  struct empty v1;
  float v2;
  double v3;
};
//SIG(1 Sf_F_D) C1{ FC2{} Fi FL}



static void Test_Sf_F_D()
{
  {
    init_simple_test("Sf_F_D");
    STRUCT_IF_C Sf_F_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_D)");
    check_field_offset(lv, v1, 0, "Sf_F_D.v1");
    check_field_offset(lv, v2, 0, "Sf_F_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_D, Sf_F_D)
//============================================================================


struct  Sf_F_F  {
  struct empty v1;
  float v2;
  float v3;
};
//SIG(1 Sf_F_F) C1{ FC2{} Fi[2]}



static void Test_Sf_F_F()
{
  {
    init_simple_test("Sf_F_F");
    STRUCT_IF_C Sf_F_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_F)");
    check_field_offset(lv, v1, 0, "Sf_F_F.v1");
    check_field_offset(lv, v2, 0, "Sf_F_F.v2");
    check_field_offset(lv, v3, 4, "Sf_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_F, Sf_F_F)
//============================================================================


struct  Sf_F_I  {
  struct empty v1;
  float v2;
  int v3;
};
//SIG(1 Sf_F_I) C1{ FC2{} Fi[2]}



static void Test_Sf_F_I()
{
  {
    init_simple_test("Sf_F_I");
    STRUCT_IF_C Sf_F_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_I)");
    check_field_offset(lv, v1, 0, "Sf_F_I.v1");
    check_field_offset(lv, v2, 0, "Sf_F_I.v2");
    check_field_offset(lv, v3, 4, "Sf_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_I, Sf_F_I)
//============================================================================


struct  Sf_F_Ip  {
  struct empty v1;
  float v2;
  int *v3;
};
//SIG(1 Sf_F_Ip) C1{ FC2{} Fi Fp}



static void Test_Sf_F_Ip()
{
  {
    init_simple_test("Sf_F_Ip");
    STRUCT_IF_C Sf_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_Ip)");
    check_field_offset(lv, v1, 0, "Sf_F_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Ip, Sf_F_Ip)
//============================================================================


struct  Sf_F_L  {
  struct empty v1;
  float v2;
  __tsi64 v3;
};
//SIG(1 Sf_F_L) C1{ FC2{} Fi FL}



static void Test_Sf_F_L()
{
  {
    init_simple_test("Sf_F_L");
    STRUCT_IF_C Sf_F_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_L)");
    check_field_offset(lv, v1, 0, "Sf_F_L.v1");
    check_field_offset(lv, v2, 0, "Sf_F_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_L, Sf_F_L)
//============================================================================


struct  Sf_F_S  {
  struct empty v1;
  float v2;
  short v3;
};
//SIG(1 Sf_F_S) C1{ FC2{} Fi Fs}



static void Test_Sf_F_S()
{
  {
    init_simple_test("Sf_F_S");
    STRUCT_IF_C Sf_F_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_S)");
    check_field_offset(lv, v1, 0, "Sf_F_S.v1");
    check_field_offset(lv, v2, 0, "Sf_F_S.v2");
    check_field_offset(lv, v3, 4, "Sf_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_S, Sf_F_S)
//============================================================================


struct  Sf_F_Sf  {
  struct empty v1;
  float v2;
  struct empty v3;
};
//SIG(1 Sf_F_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_F_Sf()
{
  {
    init_simple_test("Sf_F_Sf");
    STRUCT_IF_C Sf_F_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_F_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_Sf)");
    check_field_offset(lv, v1, 0, "Sf_F_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Sf.v2");
    check_field_offset(lv, v3, 4, "Sf_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Sf, Sf_F_Sf)
//============================================================================


struct  Sf_F_Uc  {
  struct empty v1;
  float v2;
  unsigned char v3;
};
//SIG(1 Sf_F_Uc) C1{ FC2{} Fi Fc}



static void Test_Sf_F_Uc()
{
  {
    init_simple_test("Sf_F_Uc");
    STRUCT_IF_C Sf_F_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_Uc)");
    check_field_offset(lv, v1, 0, "Sf_F_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Uc.v2");
    check_field_offset(lv, v3, 4, "Sf_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Uc, Sf_F_Uc)
//============================================================================


struct  Sf_F_Ui  {
  struct empty v1;
  float v2;
  unsigned int v3;
};
//SIG(1 Sf_F_Ui) C1{ FC2{} Fi[2]}



static void Test_Sf_F_Ui()
{
  {
    init_simple_test("Sf_F_Ui");
    STRUCT_IF_C Sf_F_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_Ui)");
    check_field_offset(lv, v1, 0, "Sf_F_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Ui, Sf_F_Ui)
//============================================================================


struct  Sf_F_Ul  {
  struct empty v1;
  float v2;
  __tsu64 v3;
};
//SIG(1 Sf_F_Ul) C1{ FC2{} Fi FL}



static void Test_Sf_F_Ul()
{
  {
    init_simple_test("Sf_F_Ul");
    STRUCT_IF_C Sf_F_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_Ul)");
    check_field_offset(lv, v1, 0, "Sf_F_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Ul, Sf_F_Ul)
//============================================================================


struct  Sf_F_Us  {
  struct empty v1;
  float v2;
  unsigned short v3;
};
//SIG(1 Sf_F_Us) C1{ FC2{} Fi Fs}



static void Test_Sf_F_Us()
{
  {
    init_simple_test("Sf_F_Us");
    STRUCT_IF_C Sf_F_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_F_Us)");
    check_field_offset(lv, v1, 0, "Sf_F_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Us.v2");
    check_field_offset(lv, v3, 4, "Sf_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Us, Sf_F_Us)
//============================================================================


struct  Sf_F_Vp  {
  struct empty v1;
  float v2;
  void *v3;
};
//SIG(1 Sf_F_Vp) C1{ FC2{} Fi Fp}



static void Test_Sf_F_Vp()
{
  {
    init_simple_test("Sf_F_Vp");
    STRUCT_IF_C Sf_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_F_Vp)");
    check_field_offset(lv, v1, 0, "Sf_F_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_F_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_F_Vp, Sf_F_Vp)
//============================================================================


struct  Sf_I  {
  struct empty v1;
  int v2;
};
//SIG(1 Sf_I) C1{ FC2{} Fi}



static void Test_Sf_I()
{
  {
    init_simple_test("Sf_I");
    STRUCT_IF_C Sf_I lv;
    check2(sizeof(lv), 4, "sizeof(Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I)");
    check_field_offset(lv, v1, 0, "Sf_I.v1");
    check_field_offset(lv, v2, 0, "Sf_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I, Sf_I)
//============================================================================


struct  Sf_I_BFu15i  {
  struct empty v1;
  int v2;
  unsigned int v3:15;
};
//SIG(1 Sf_I_BFu15i) C1{ FC2{} Fi Fi:15}



static void Test_Sf_I_BFu15i()
{
  {
    init_simple_test("Sf_I_BFu15i");
    static STRUCT_IF_C Sf_I_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_I_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu15i, Sf_I_BFu15i)
//============================================================================


struct  Sf_I_BFu15ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_I_BFu15ll) C1{ FC2{} Fi FL:15}



static void Test_Sf_I_BFu15ll()
{
  {
    init_simple_test("Sf_I_BFu15ll");
    static STRUCT_IF_C Sf_I_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_I_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu15ll, Sf_I_BFu15ll)
//============================================================================


struct  Sf_I_BFu15s  {
  struct empty v1;
  int v2;
  unsigned short v3:15;
};
//SIG(1 Sf_I_BFu15s) C1{ FC2{} Fi Fs:15}



static void Test_Sf_I_BFu15s()
{
  {
    init_simple_test("Sf_I_BFu15s");
    static STRUCT_IF_C Sf_I_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_I_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu15s, Sf_I_BFu15s)
//============================================================================


struct  Sf_I_BFu16i  {
  struct empty v1;
  int v2;
  unsigned int v3:16;
};
//SIG(1 Sf_I_BFu16i) C1{ FC2{} Fi Fi:16}



static void Test_Sf_I_BFu16i()
{
  {
    init_simple_test("Sf_I_BFu16i");
    static STRUCT_IF_C Sf_I_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_I_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu16i, Sf_I_BFu16i)
//============================================================================


struct  Sf_I_BFu16ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_I_BFu16ll) C1{ FC2{} Fi FL:16}



static void Test_Sf_I_BFu16ll()
{
  {
    init_simple_test("Sf_I_BFu16ll");
    static STRUCT_IF_C Sf_I_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_I_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu16ll, Sf_I_BFu16ll)
//============================================================================


struct  Sf_I_BFu16s  {
  struct empty v1;
  int v2;
  unsigned short v3:16;
};
//SIG(1 Sf_I_BFu16s) C1{ FC2{} Fi Fs:16}



static void Test_Sf_I_BFu16s()
{
  {
    init_simple_test("Sf_I_BFu16s");
    static STRUCT_IF_C Sf_I_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_I_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu16s, Sf_I_BFu16s)
//============================================================================


struct  Sf_I_BFu17i  {
  struct empty v1;
  int v2;
  unsigned int v3:17;
};
//SIG(1 Sf_I_BFu17i) C1{ FC2{} Fi Fi:17}



static void Test_Sf_I_BFu17i()
{
  {
    init_simple_test("Sf_I_BFu17i");
    static STRUCT_IF_C Sf_I_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_I_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu17i, Sf_I_BFu17i)
//============================================================================


struct  Sf_I_BFu17ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_I_BFu17ll) C1{ FC2{} Fi FL:17}



static void Test_Sf_I_BFu17ll()
{
  {
    init_simple_test("Sf_I_BFu17ll");
    static STRUCT_IF_C Sf_I_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_I_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu17ll, Sf_I_BFu17ll)
//============================================================================


struct  Sf_I_BFu1c  {
  struct empty v1;
  int v2;
  unsigned char v3:1;
};
//SIG(1 Sf_I_BFu1c) C1{ FC2{} Fi Fc:1}



static void Test_Sf_I_BFu1c()
{
  {
    init_simple_test("Sf_I_BFu1c");
    static STRUCT_IF_C Sf_I_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu1c, Sf_I_BFu1c)
//============================================================================


struct  Sf_I_BFu1i  {
  struct empty v1;
  int v2;
  unsigned int v3:1;
};
//SIG(1 Sf_I_BFu1i) C1{ FC2{} Fi Fi:1}



static void Test_Sf_I_BFu1i()
{
  {
    init_simple_test("Sf_I_BFu1i");
    static STRUCT_IF_C Sf_I_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu1i, Sf_I_BFu1i)
//============================================================================


struct  Sf_I_BFu1ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_I_BFu1ll) C1{ FC2{} Fi FL:1}



static void Test_Sf_I_BFu1ll()
{
  {
    init_simple_test("Sf_I_BFu1ll");
    static STRUCT_IF_C Sf_I_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu1ll, Sf_I_BFu1ll)
//============================================================================


struct  Sf_I_BFu1s  {
  struct empty v1;
  int v2;
  unsigned short v3:1;
};
//SIG(1 Sf_I_BFu1s) C1{ FC2{} Fi Fs:1}



static void Test_Sf_I_BFu1s()
{
  {
    init_simple_test("Sf_I_BFu1s");
    static STRUCT_IF_C Sf_I_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu1s, Sf_I_BFu1s)
//============================================================================


struct  Sf_I_BFu31i  {
  struct empty v1;
  int v2;
  unsigned int v3:31;
};
//SIG(1 Sf_I_BFu31i) C1{ FC2{} Fi Fi:31}



static void Test_Sf_I_BFu31i()
{
  {
    init_simple_test("Sf_I_BFu31i");
    static STRUCT_IF_C Sf_I_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_I_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu31i, Sf_I_BFu31i)
//============================================================================


struct  Sf_I_BFu31ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_I_BFu31ll) C1{ FC2{} Fi FL:31}



static void Test_Sf_I_BFu31ll()
{
  {
    init_simple_test("Sf_I_BFu31ll");
    static STRUCT_IF_C Sf_I_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_I_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu31ll, Sf_I_BFu31ll)
//============================================================================


struct  Sf_I_BFu32i  {
  struct empty v1;
  int v2;
  unsigned int v3:32;
};
//SIG(1 Sf_I_BFu32i) C1{ FC2{} Fi Fi:32}



static void Test_Sf_I_BFu32i()
{
  {
    init_simple_test("Sf_I_BFu32i");
    static STRUCT_IF_C Sf_I_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_I_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu32i, Sf_I_BFu32i)
//============================================================================


struct  Sf_I_BFu32ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_I_BFu32ll) C1{ FC2{} Fi FL:32}



static void Test_Sf_I_BFu32ll()
{
  {
    init_simple_test("Sf_I_BFu32ll");
    static STRUCT_IF_C Sf_I_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_I_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu32ll, Sf_I_BFu32ll)
//============================================================================


struct  Sf_I_BFu33  {
  struct empty v1;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_I_BFu33) C1{ FC2{} Fi FL:33}



static void Test_Sf_I_BFu33()
{
  {
    init_simple_test("Sf_I_BFu33");
    static STRUCT_IF_C Sf_I_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_I_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu33, Sf_I_BFu33)
//============================================================================


struct  Sf_I_BFu7c  {
  struct empty v1;
  int v2;
  unsigned char v3:7;
};
//SIG(1 Sf_I_BFu7c) C1{ FC2{} Fi Fc:7}



static void Test_Sf_I_BFu7c()
{
  {
    init_simple_test("Sf_I_BFu7c");
    static STRUCT_IF_C Sf_I_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_I_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu7c, Sf_I_BFu7c)
//============================================================================


struct  Sf_I_BFu7i  {
  struct empty v1;
  int v2;
  unsigned int v3:7;
};
//SIG(1 Sf_I_BFu7i) C1{ FC2{} Fi Fi:7}



static void Test_Sf_I_BFu7i()
{
  {
    init_simple_test("Sf_I_BFu7i");
    static STRUCT_IF_C Sf_I_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_I_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu7i, Sf_I_BFu7i)
//============================================================================


struct  Sf_I_BFu7ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_I_BFu7ll) C1{ FC2{} Fi FL:7}



static void Test_Sf_I_BFu7ll()
{
  {
    init_simple_test("Sf_I_BFu7ll");
    static STRUCT_IF_C Sf_I_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_I_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu7ll, Sf_I_BFu7ll)
//============================================================================


struct  Sf_I_BFu7s  {
  struct empty v1;
  int v2;
  unsigned short v3:7;
};
//SIG(1 Sf_I_BFu7s) C1{ FC2{} Fi Fs:7}



static void Test_Sf_I_BFu7s()
{
  {
    init_simple_test("Sf_I_BFu7s");
    static STRUCT_IF_C Sf_I_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_I_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu7s, Sf_I_BFu7s)
//============================================================================


struct  Sf_I_BFu8c  {
  struct empty v1;
  int v2;
  unsigned char v3:8;
};
//SIG(1 Sf_I_BFu8c) C1{ FC2{} Fi Fc:8}



static void Test_Sf_I_BFu8c()
{
  {
    init_simple_test("Sf_I_BFu8c");
    static STRUCT_IF_C Sf_I_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_I_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu8c, Sf_I_BFu8c)
//============================================================================


struct  Sf_I_BFu8i  {
  struct empty v1;
  int v2;
  unsigned int v3:8;
};
//SIG(1 Sf_I_BFu8i) C1{ FC2{} Fi Fi:8}



static void Test_Sf_I_BFu8i()
{
  {
    init_simple_test("Sf_I_BFu8i");
    static STRUCT_IF_C Sf_I_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_I_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu8i, Sf_I_BFu8i)
//============================================================================


struct  Sf_I_BFu8ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_I_BFu8ll) C1{ FC2{} Fi FL:8}



static void Test_Sf_I_BFu8ll()
{
  {
    init_simple_test("Sf_I_BFu8ll");
    static STRUCT_IF_C Sf_I_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_I_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu8ll, Sf_I_BFu8ll)
//============================================================================


struct  Sf_I_BFu8s  {
  struct empty v1;
  int v2;
  unsigned short v3:8;
};
//SIG(1 Sf_I_BFu8s) C1{ FC2{} Fi Fs:8}



static void Test_Sf_I_BFu8s()
{
  {
    init_simple_test("Sf_I_BFu8s");
    static STRUCT_IF_C Sf_I_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_I_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu8s, Sf_I_BFu8s)
//============================================================================


struct  Sf_I_BFu9i  {
  struct empty v1;
  int v2;
  unsigned int v3:9;
};
//SIG(1 Sf_I_BFu9i) C1{ FC2{} Fi Fi:9}



static void Test_Sf_I_BFu9i()
{
  {
    init_simple_test("Sf_I_BFu9i");
    static STRUCT_IF_C Sf_I_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_I_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu9i, Sf_I_BFu9i)
//============================================================================


struct  Sf_I_BFu9ll  {
  struct empty v1;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_I_BFu9ll) C1{ FC2{} Fi FL:9}



static void Test_Sf_I_BFu9ll()
{
  {
    init_simple_test("Sf_I_BFu9ll");
    static STRUCT_IF_C Sf_I_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_I_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu9ll, Sf_I_BFu9ll)
//============================================================================


struct  Sf_I_BFu9s  {
  struct empty v1;
  int v2;
  unsigned short v3:9;
};
//SIG(1 Sf_I_BFu9s) C1{ FC2{} Fi Fs:9}



static void Test_Sf_I_BFu9s()
{
  {
    init_simple_test("Sf_I_BFu9s");
    static STRUCT_IF_C Sf_I_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_I_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_I_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_BFu9s, Sf_I_BFu9s)
//============================================================================


struct  Sf_I_C  {
  struct empty v1;
  int v2;
  char v3;
};
//SIG(1 Sf_I_C) C1{ FC2{} Fi Fc}



static void Test_Sf_I_C()
{
  {
    init_simple_test("Sf_I_C");
    STRUCT_IF_C Sf_I_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_C)");
    check_field_offset(lv, v1, 0, "Sf_I_C.v1");
    check_field_offset(lv, v2, 0, "Sf_I_C.v2");
    check_field_offset(lv, v3, 4, "Sf_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_C, Sf_I_C)
//============================================================================


struct  Sf_I_D  {
  struct empty v1;
  int v2;
  double v3;
};
//SIG(1 Sf_I_D) C1{ FC2{} Fi FL}



static void Test_Sf_I_D()
{
  {
    init_simple_test("Sf_I_D");
    STRUCT_IF_C Sf_I_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_D)");
    check_field_offset(lv, v1, 0, "Sf_I_D.v1");
    check_field_offset(lv, v2, 0, "Sf_I_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_D, Sf_I_D)
//============================================================================


struct  Sf_I_F  {
  struct empty v1;
  int v2;
  float v3;
};
//SIG(1 Sf_I_F) C1{ FC2{} Fi[2]}



static void Test_Sf_I_F()
{
  {
    init_simple_test("Sf_I_F");
    STRUCT_IF_C Sf_I_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_F)");
    check_field_offset(lv, v1, 0, "Sf_I_F.v1");
    check_field_offset(lv, v2, 0, "Sf_I_F.v2");
    check_field_offset(lv, v3, 4, "Sf_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_F, Sf_I_F)
//============================================================================


struct  Sf_I_I  {
  struct empty v1;
  int v2;
  int v3;
};
//SIG(1 Sf_I_I) C1{ FC2{} Fi[2]}



static void Test_Sf_I_I()
{
  {
    init_simple_test("Sf_I_I");
    STRUCT_IF_C Sf_I_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_I)");
    check_field_offset(lv, v1, 0, "Sf_I_I.v1");
    check_field_offset(lv, v2, 0, "Sf_I_I.v2");
    check_field_offset(lv, v3, 4, "Sf_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_I, Sf_I_I)
//============================================================================


struct  Sf_I_Ip  {
  struct empty v1;
  int v2;
  int *v3;
};
//SIG(1 Sf_I_Ip) C1{ FC2{} Fi Fp}



static void Test_Sf_I_Ip()
{
  {
    init_simple_test("Sf_I_Ip");
    STRUCT_IF_C Sf_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_Ip)");
    check_field_offset(lv, v1, 0, "Sf_I_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Ip, Sf_I_Ip)
//============================================================================


struct  Sf_I_L  {
  struct empty v1;
  int v2;
  __tsi64 v3;
};
//SIG(1 Sf_I_L) C1{ FC2{} Fi FL}



static void Test_Sf_I_L()
{
  {
    init_simple_test("Sf_I_L");
    STRUCT_IF_C Sf_I_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_L)");
    check_field_offset(lv, v1, 0, "Sf_I_L.v1");
    check_field_offset(lv, v2, 0, "Sf_I_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_L, Sf_I_L)
//============================================================================


struct  Sf_I_S  {
  struct empty v1;
  int v2;
  short v3;
};
//SIG(1 Sf_I_S) C1{ FC2{} Fi Fs}



static void Test_Sf_I_S()
{
  {
    init_simple_test("Sf_I_S");
    STRUCT_IF_C Sf_I_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_S)");
    check_field_offset(lv, v1, 0, "Sf_I_S.v1");
    check_field_offset(lv, v2, 0, "Sf_I_S.v2");
    check_field_offset(lv, v3, 4, "Sf_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_S, Sf_I_S)
//============================================================================


struct  Sf_I_Sf  {
  struct empty v1;
  int v2;
  struct empty v3;
};
//SIG(1 Sf_I_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_I_Sf()
{
  {
    init_simple_test("Sf_I_Sf");
    STRUCT_IF_C Sf_I_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_I_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_Sf)");
    check_field_offset(lv, v1, 0, "Sf_I_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Sf.v2");
    check_field_offset(lv, v3, 4, "Sf_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Sf, Sf_I_Sf)
//============================================================================


struct  Sf_I_Uc  {
  struct empty v1;
  int v2;
  unsigned char v3;
};
//SIG(1 Sf_I_Uc) C1{ FC2{} Fi Fc}



static void Test_Sf_I_Uc()
{
  {
    init_simple_test("Sf_I_Uc");
    STRUCT_IF_C Sf_I_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_Uc)");
    check_field_offset(lv, v1, 0, "Sf_I_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Uc.v2");
    check_field_offset(lv, v3, 4, "Sf_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Uc, Sf_I_Uc)
//============================================================================


struct  Sf_I_Ui  {
  struct empty v1;
  int v2;
  unsigned int v3;
};
//SIG(1 Sf_I_Ui) C1{ FC2{} Fi[2]}



static void Test_Sf_I_Ui()
{
  {
    init_simple_test("Sf_I_Ui");
    STRUCT_IF_C Sf_I_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_Ui)");
    check_field_offset(lv, v1, 0, "Sf_I_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Ui, Sf_I_Ui)
//============================================================================


struct  Sf_I_Ul  {
  struct empty v1;
  int v2;
  __tsu64 v3;
};
//SIG(1 Sf_I_Ul) C1{ FC2{} Fi FL}



static void Test_Sf_I_Ul()
{
  {
    init_simple_test("Sf_I_Ul");
    STRUCT_IF_C Sf_I_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_Ul)");
    check_field_offset(lv, v1, 0, "Sf_I_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Ul, Sf_I_Ul)
//============================================================================


struct  Sf_I_Us  {
  struct empty v1;
  int v2;
  unsigned short v3;
};
//SIG(1 Sf_I_Us) C1{ FC2{} Fi Fs}



static void Test_Sf_I_Us()
{
  {
    init_simple_test("Sf_I_Us");
    STRUCT_IF_C Sf_I_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_I_Us)");
    check_field_offset(lv, v1, 0, "Sf_I_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Us.v2");
    check_field_offset(lv, v3, 4, "Sf_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Us, Sf_I_Us)
//============================================================================


struct  Sf_I_Vp  {
  struct empty v1;
  int v2;
  void *v3;
};
//SIG(1 Sf_I_Vp) C1{ FC2{} Fi Fp}



static void Test_Sf_I_Vp()
{
  {
    init_simple_test("Sf_I_Vp");
    STRUCT_IF_C Sf_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_I_Vp)");
    check_field_offset(lv, v1, 0, "Sf_I_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_I_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_I_Vp, Sf_I_Vp)
//============================================================================


struct  Sf_Ip  {
  struct empty v1;
  int *v2;
};
//SIG(1 Sf_Ip) C1{ FC2{} Fp}



static void Test_Sf_Ip()
{
  {
    init_simple_test("Sf_Ip");
    STRUCT_IF_C Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip, Sf_Ip)
//============================================================================


struct  Sf_Ip_BFu15i  {
  struct empty v1;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Ip_BFu15i) C1{ FC2{} Fp Fi:15}



static void Test_Sf_Ip_BFu15i()
{
  {
    init_simple_test("Sf_Ip_BFu15i");
    static STRUCT_IF_C Sf_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu15i, Sf_Ip_BFu15i)
//============================================================================


struct  Sf_Ip_BFu15ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Ip_BFu15ll) C1{ FC2{} Fp FL:15}



static void Test_Sf_Ip_BFu15ll()
{
  {
    init_simple_test("Sf_Ip_BFu15ll");
    static STRUCT_IF_C Sf_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu15ll, Sf_Ip_BFu15ll)
//============================================================================


struct  Sf_Ip_BFu15s  {
  struct empty v1;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Ip_BFu15s) C1{ FC2{} Fp Fs:15}



static void Test_Sf_Ip_BFu15s()
{
  {
    init_simple_test("Sf_Ip_BFu15s");
    static STRUCT_IF_C Sf_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu15s, Sf_Ip_BFu15s)
//============================================================================


struct  Sf_Ip_BFu16i  {
  struct empty v1;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Ip_BFu16i) C1{ FC2{} Fp Fi:16}



static void Test_Sf_Ip_BFu16i()
{
  {
    init_simple_test("Sf_Ip_BFu16i");
    static STRUCT_IF_C Sf_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu16i, Sf_Ip_BFu16i)
//============================================================================


struct  Sf_Ip_BFu16ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Ip_BFu16ll) C1{ FC2{} Fp FL:16}



static void Test_Sf_Ip_BFu16ll()
{
  {
    init_simple_test("Sf_Ip_BFu16ll");
    static STRUCT_IF_C Sf_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu16ll, Sf_Ip_BFu16ll)
//============================================================================


struct  Sf_Ip_BFu16s  {
  struct empty v1;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Ip_BFu16s) C1{ FC2{} Fp Fs:16}



static void Test_Sf_Ip_BFu16s()
{
  {
    init_simple_test("Sf_Ip_BFu16s");
    static STRUCT_IF_C Sf_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu16s, Sf_Ip_BFu16s)
//============================================================================


struct  Sf_Ip_BFu17i  {
  struct empty v1;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Ip_BFu17i) C1{ FC2{} Fp Fi:17}



static void Test_Sf_Ip_BFu17i()
{
  {
    init_simple_test("Sf_Ip_BFu17i");
    static STRUCT_IF_C Sf_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Sf_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Sf_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu17i, Sf_Ip_BFu17i)
//============================================================================


struct  Sf_Ip_BFu17ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Ip_BFu17ll) C1{ FC2{} Fp FL:17}



static void Test_Sf_Ip_BFu17ll()
{
  {
    init_simple_test("Sf_Ip_BFu17ll");
    static STRUCT_IF_C Sf_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Sf_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Sf_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu17ll, Sf_Ip_BFu17ll)
//============================================================================


struct  Sf_Ip_BFu1c  {
  struct empty v1;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Ip_BFu1c) C1{ FC2{} Fp Fc:1}



static void Test_Sf_Ip_BFu1c()
{
  {
    init_simple_test("Sf_Ip_BFu1c");
    static STRUCT_IF_C Sf_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu1c, Sf_Ip_BFu1c)
//============================================================================


struct  Sf_Ip_BFu1i  {
  struct empty v1;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Ip_BFu1i) C1{ FC2{} Fp Fi:1}



static void Test_Sf_Ip_BFu1i()
{
  {
    init_simple_test("Sf_Ip_BFu1i");
    static STRUCT_IF_C Sf_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu1i, Sf_Ip_BFu1i)
//============================================================================


struct  Sf_Ip_BFu1ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Ip_BFu1ll) C1{ FC2{} Fp FL:1}



static void Test_Sf_Ip_BFu1ll()
{
  {
    init_simple_test("Sf_Ip_BFu1ll");
    static STRUCT_IF_C Sf_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu1ll, Sf_Ip_BFu1ll)
//============================================================================


struct  Sf_Ip_BFu1s  {
  struct empty v1;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Ip_BFu1s) C1{ FC2{} Fp Fs:1}



static void Test_Sf_Ip_BFu1s()
{
  {
    init_simple_test("Sf_Ip_BFu1s");
    static STRUCT_IF_C Sf_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu1s, Sf_Ip_BFu1s)
//============================================================================


struct  Sf_Ip_BFu31i  {
  struct empty v1;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Ip_BFu31i) C1{ FC2{} Fp Fi:31}



static void Test_Sf_Ip_BFu31i()
{
  {
    init_simple_test("Sf_Ip_BFu31i");
    static STRUCT_IF_C Sf_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Sf_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Sf_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu31i, Sf_Ip_BFu31i)
//============================================================================


struct  Sf_Ip_BFu31ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Ip_BFu31ll) C1{ FC2{} Fp FL:31}



static void Test_Sf_Ip_BFu31ll()
{
  {
    init_simple_test("Sf_Ip_BFu31ll");
    static STRUCT_IF_C Sf_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Sf_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Sf_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu31ll, Sf_Ip_BFu31ll)
//============================================================================


struct  Sf_Ip_BFu32i  {
  struct empty v1;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Ip_BFu32i) C1{ FC2{} Fp Fi:32}



static void Test_Sf_Ip_BFu32i()
{
  {
    init_simple_test("Sf_Ip_BFu32i");
    static STRUCT_IF_C Sf_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Sf_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Sf_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu32i, Sf_Ip_BFu32i)
//============================================================================


struct  Sf_Ip_BFu32ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Ip_BFu32ll) C1{ FC2{} Fp FL:32}



static void Test_Sf_Ip_BFu32ll()
{
  {
    init_simple_test("Sf_Ip_BFu32ll");
    static STRUCT_IF_C Sf_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Sf_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Sf_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu32ll, Sf_Ip_BFu32ll)
//============================================================================


struct  Sf_Ip_BFu33  {
  struct empty v1;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Ip_BFu33) C1{ FC2{} Fp FL:33}



static void Test_Sf_Ip_BFu33()
{
  {
    init_simple_test("Sf_Ip_BFu33");
    static STRUCT_IF_C Sf_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu33, Sf_Ip_BFu33)
//============================================================================


struct  Sf_Ip_BFu7c  {
  struct empty v1;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Ip_BFu7c) C1{ FC2{} Fp Fc:7}



static void Test_Sf_Ip_BFu7c()
{
  {
    init_simple_test("Sf_Ip_BFu7c");
    static STRUCT_IF_C Sf_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu7c, Sf_Ip_BFu7c)
//============================================================================


struct  Sf_Ip_BFu7i  {
  struct empty v1;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Ip_BFu7i) C1{ FC2{} Fp Fi:7}



static void Test_Sf_Ip_BFu7i()
{
  {
    init_simple_test("Sf_Ip_BFu7i");
    static STRUCT_IF_C Sf_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu7i, Sf_Ip_BFu7i)
//============================================================================


struct  Sf_Ip_BFu7ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Ip_BFu7ll) C1{ FC2{} Fp FL:7}



static void Test_Sf_Ip_BFu7ll()
{
  {
    init_simple_test("Sf_Ip_BFu7ll");
    static STRUCT_IF_C Sf_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu7ll, Sf_Ip_BFu7ll)
//============================================================================


struct  Sf_Ip_BFu7s  {
  struct empty v1;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Ip_BFu7s) C1{ FC2{} Fp Fs:7}



static void Test_Sf_Ip_BFu7s()
{
  {
    init_simple_test("Sf_Ip_BFu7s");
    static STRUCT_IF_C Sf_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu7s, Sf_Ip_BFu7s)
//============================================================================


struct  Sf_Ip_BFu8c  {
  struct empty v1;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Ip_BFu8c) C1{ FC2{} Fp Fc:8}



static void Test_Sf_Ip_BFu8c()
{
  {
    init_simple_test("Sf_Ip_BFu8c");
    static STRUCT_IF_C Sf_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu8c, Sf_Ip_BFu8c)
//============================================================================


struct  Sf_Ip_BFu8i  {
  struct empty v1;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Ip_BFu8i) C1{ FC2{} Fp Fi:8}



static void Test_Sf_Ip_BFu8i()
{
  {
    init_simple_test("Sf_Ip_BFu8i");
    static STRUCT_IF_C Sf_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu8i, Sf_Ip_BFu8i)
//============================================================================


struct  Sf_Ip_BFu8ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Ip_BFu8ll) C1{ FC2{} Fp FL:8}



static void Test_Sf_Ip_BFu8ll()
{
  {
    init_simple_test("Sf_Ip_BFu8ll");
    static STRUCT_IF_C Sf_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu8ll, Sf_Ip_BFu8ll)
//============================================================================


struct  Sf_Ip_BFu8s  {
  struct empty v1;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Ip_BFu8s) C1{ FC2{} Fp Fs:8}



static void Test_Sf_Ip_BFu8s()
{
  {
    init_simple_test("Sf_Ip_BFu8s");
    static STRUCT_IF_C Sf_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu8s, Sf_Ip_BFu8s)
//============================================================================


struct  Sf_Ip_BFu9i  {
  struct empty v1;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Ip_BFu9i) C1{ FC2{} Fp Fi:9}



static void Test_Sf_Ip_BFu9i()
{
  {
    init_simple_test("Sf_Ip_BFu9i");
    static STRUCT_IF_C Sf_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu9i, Sf_Ip_BFu9i)
//============================================================================


struct  Sf_Ip_BFu9ll  {
  struct empty v1;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Ip_BFu9ll) C1{ FC2{} Fp FL:9}



static void Test_Sf_Ip_BFu9ll()
{
  {
    init_simple_test("Sf_Ip_BFu9ll");
    static STRUCT_IF_C Sf_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu9ll, Sf_Ip_BFu9ll)
//============================================================================


struct  Sf_Ip_BFu9s  {
  struct empty v1;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Ip_BFu9s) C1{ FC2{} Fp Fs:9}



static void Test_Sf_Ip_BFu9s()
{
  {
    init_simple_test("Sf_Ip_BFu9s");
    static STRUCT_IF_C Sf_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Ip_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_BFu9s, Sf_Ip_BFu9s)
//============================================================================


struct  Sf_Ip_C  {
  struct empty v1;
  int *v2;
  char v3;
};
//SIG(1 Sf_Ip_C) C1{ FC2{} Fp Fc}



static void Test_Sf_Ip_C()
{
  {
    init_simple_test("Sf_Ip_C");
    STRUCT_IF_C Sf_Ip_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_C)");
    check_field_offset(lv, v1, 0, "Sf_Ip_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_C, Sf_Ip_C)
//============================================================================


struct  Sf_Ip_D  {
  struct empty v1;
  int *v2;
  double v3;
};
//SIG(1 Sf_Ip_D) C1{ FC2{} Fp FL}



static void Test_Sf_Ip_D()
{
  {
    init_simple_test("Sf_Ip_D");
    STRUCT_IF_C Sf_Ip_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_D)");
    check_field_offset(lv, v1, 0, "Sf_Ip_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_D, Sf_Ip_D)
//============================================================================


struct  Sf_Ip_F  {
  struct empty v1;
  int *v2;
  float v3;
};
//SIG(1 Sf_Ip_F) C1{ FC2{} Fp Fi}



static void Test_Sf_Ip_F()
{
  {
    init_simple_test("Sf_Ip_F");
    STRUCT_IF_C Sf_Ip_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_F)");
    check_field_offset(lv, v1, 0, "Sf_Ip_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_F, Sf_Ip_F)
//============================================================================


struct  Sf_Ip_I  {
  struct empty v1;
  int *v2;
  int v3;
};
//SIG(1 Sf_Ip_I) C1{ FC2{} Fp Fi}



static void Test_Sf_Ip_I()
{
  {
    init_simple_test("Sf_Ip_I");
    STRUCT_IF_C Sf_Ip_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_I)");
    check_field_offset(lv, v1, 0, "Sf_Ip_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_I, Sf_Ip_I)
//============================================================================


struct  Sf_Ip_Ip  {
  struct empty v1;
  int *v2;
  int *v3;
};
//SIG(1 Sf_Ip_Ip) C1{ FC2{} Fp[2]}



static void Test_Sf_Ip_Ip()
{
  {
    init_simple_test("Sf_Ip_Ip");
    STRUCT_IF_C Sf_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Ip, Sf_Ip_Ip)
//============================================================================


struct  Sf_Ip_L  {
  struct empty v1;
  int *v2;
  __tsi64 v3;
};
//SIG(1 Sf_Ip_L) C1{ FC2{} Fp FL}



static void Test_Sf_Ip_L()
{
  {
    init_simple_test("Sf_Ip_L");
    STRUCT_IF_C Sf_Ip_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_L)");
    check_field_offset(lv, v1, 0, "Sf_Ip_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_L, Sf_Ip_L)
//============================================================================


struct  Sf_Ip_S  {
  struct empty v1;
  int *v2;
  short v3;
};
//SIG(1 Sf_Ip_S) C1{ FC2{} Fp Fs}



static void Test_Sf_Ip_S()
{
  {
    init_simple_test("Sf_Ip_S");
    STRUCT_IF_C Sf_Ip_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_S)");
    check_field_offset(lv, v1, 0, "Sf_Ip_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_S, Sf_Ip_S)
//============================================================================


struct  Sf_Ip_Sf  {
  struct empty v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Sf_Ip_Sf) C1{ FC2{} Fp FC2}



static void Test_Sf_Ip_Sf()
{
  {
    init_simple_test("Sf_Ip_Sf");
    STRUCT_IF_C Sf_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Sf, Sf_Ip_Sf)
//============================================================================


struct  Sf_Ip_Uc  {
  struct empty v1;
  int *v2;
  unsigned char v3;
};
//SIG(1 Sf_Ip_Uc) C1{ FC2{} Fp Fc}



static void Test_Sf_Ip_Uc()
{
  {
    init_simple_test("Sf_Ip_Uc");
    STRUCT_IF_C Sf_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Uc, Sf_Ip_Uc)
//============================================================================


struct  Sf_Ip_Ui  {
  struct empty v1;
  int *v2;
  unsigned int v3;
};
//SIG(1 Sf_Ip_Ui) C1{ FC2{} Fp Fi}



static void Test_Sf_Ip_Ui()
{
  {
    init_simple_test("Sf_Ip_Ui");
    STRUCT_IF_C Sf_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Ui, Sf_Ip_Ui)
//============================================================================


struct  Sf_Ip_Ul  {
  struct empty v1;
  int *v2;
  __tsu64 v3;
};
//SIG(1 Sf_Ip_Ul) C1{ FC2{} Fp FL}



static void Test_Sf_Ip_Ul()
{
  {
    init_simple_test("Sf_Ip_Ul");
    STRUCT_IF_C Sf_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Ul, Sf_Ip_Ul)
//============================================================================


struct  Sf_Ip_Us  {
  struct empty v1;
  int *v2;
  unsigned short v3;
};
//SIG(1 Sf_Ip_Us) C1{ FC2{} Fp Fs}



static void Test_Sf_Ip_Us()
{
  {
    init_simple_test("Sf_Ip_Us");
    STRUCT_IF_C Sf_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Us)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Us, Sf_Ip_Us)
//============================================================================


struct  Sf_Ip_Vp  {
  struct empty v1;
  int *v2;
  void *v3;
};
//SIG(1 Sf_Ip_Vp) C1{ FC2{} Fp[2]}



static void Test_Sf_Ip_Vp()
{
  {
    init_simple_test("Sf_Ip_Vp");
    STRUCT_IF_C Sf_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ip_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Ip_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ip_Vp, Sf_Ip_Vp)
//============================================================================


struct  Sf_L  {
  struct empty v1;
  __tsi64 v2;
};
//SIG(1 Sf_L) C1{ FC2{} FL}



static void Test_Sf_L()
{
  {
    init_simple_test("Sf_L");
    STRUCT_IF_C Sf_L lv;
    check2(sizeof(lv), 8, "sizeof(Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L)");
    check_field_offset(lv, v1, 0, "Sf_L.v1");
    check_field_offset(lv, v2, 0, "Sf_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L, Sf_L)
//============================================================================


struct  Sf_L_BFu15i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 Sf_L_BFu15i) C1{ FC2{} FL Fi:15}



static void Test_Sf_L_BFu15i()
{
  {
    init_simple_test("Sf_L_BFu15i");
    static STRUCT_IF_C Sf_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_L_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu15i, Sf_L_BFu15i)
//============================================================================


struct  Sf_L_BFu15ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_L_BFu15ll) C1{ FC2{} FL FL:15}



static void Test_Sf_L_BFu15ll()
{
  {
    init_simple_test("Sf_L_BFu15ll");
    static STRUCT_IF_C Sf_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_L_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu15ll, Sf_L_BFu15ll)
//============================================================================


struct  Sf_L_BFu15s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 Sf_L_BFu15s) C1{ FC2{} FL Fs:15}



static void Test_Sf_L_BFu15s()
{
  {
    init_simple_test("Sf_L_BFu15s");
    static STRUCT_IF_C Sf_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_L_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu15s, Sf_L_BFu15s)
//============================================================================


struct  Sf_L_BFu16i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 Sf_L_BFu16i) C1{ FC2{} FL Fi:16}



static void Test_Sf_L_BFu16i()
{
  {
    init_simple_test("Sf_L_BFu16i");
    static STRUCT_IF_C Sf_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_L_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu16i, Sf_L_BFu16i)
//============================================================================


struct  Sf_L_BFu16ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_L_BFu16ll) C1{ FC2{} FL FL:16}



static void Test_Sf_L_BFu16ll()
{
  {
    init_simple_test("Sf_L_BFu16ll");
    static STRUCT_IF_C Sf_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_L_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu16ll, Sf_L_BFu16ll)
//============================================================================


struct  Sf_L_BFu16s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 Sf_L_BFu16s) C1{ FC2{} FL Fs:16}



static void Test_Sf_L_BFu16s()
{
  {
    init_simple_test("Sf_L_BFu16s");
    static STRUCT_IF_C Sf_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_L_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu16s, Sf_L_BFu16s)
//============================================================================


struct  Sf_L_BFu17i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 Sf_L_BFu17i) C1{ FC2{} FL Fi:17}



static void Test_Sf_L_BFu17i()
{
  {
    init_simple_test("Sf_L_BFu17i");
    static STRUCT_IF_C Sf_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_L_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu17i, Sf_L_BFu17i)
//============================================================================


struct  Sf_L_BFu17ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_L_BFu17ll) C1{ FC2{} FL FL:17}



static void Test_Sf_L_BFu17ll()
{
  {
    init_simple_test("Sf_L_BFu17ll");
    static STRUCT_IF_C Sf_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_L_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu17ll, Sf_L_BFu17ll)
//============================================================================


struct  Sf_L_BFu1c  {
  struct empty v1;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 Sf_L_BFu1c) C1{ FC2{} FL Fc:1}



static void Test_Sf_L_BFu1c()
{
  {
    init_simple_test("Sf_L_BFu1c");
    static STRUCT_IF_C Sf_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu1c, Sf_L_BFu1c)
//============================================================================


struct  Sf_L_BFu1i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 Sf_L_BFu1i) C1{ FC2{} FL Fi:1}



static void Test_Sf_L_BFu1i()
{
  {
    init_simple_test("Sf_L_BFu1i");
    static STRUCT_IF_C Sf_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu1i, Sf_L_BFu1i)
//============================================================================


struct  Sf_L_BFu1ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_L_BFu1ll) C1{ FC2{} FL FL:1}



static void Test_Sf_L_BFu1ll()
{
  {
    init_simple_test("Sf_L_BFu1ll");
    static STRUCT_IF_C Sf_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu1ll, Sf_L_BFu1ll)
//============================================================================


struct  Sf_L_BFu1s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 Sf_L_BFu1s) C1{ FC2{} FL Fs:1}



static void Test_Sf_L_BFu1s()
{
  {
    init_simple_test("Sf_L_BFu1s");
    static STRUCT_IF_C Sf_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu1s, Sf_L_BFu1s)
//============================================================================


struct  Sf_L_BFu31i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 Sf_L_BFu31i) C1{ FC2{} FL Fi:31}



static void Test_Sf_L_BFu31i()
{
  {
    init_simple_test("Sf_L_BFu31i");
    static STRUCT_IF_C Sf_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_L_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu31i, Sf_L_BFu31i)
//============================================================================


struct  Sf_L_BFu31ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_L_BFu31ll) C1{ FC2{} FL FL:31}



static void Test_Sf_L_BFu31ll()
{
  {
    init_simple_test("Sf_L_BFu31ll");
    static STRUCT_IF_C Sf_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_L_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu31ll, Sf_L_BFu31ll)
//============================================================================


struct  Sf_L_BFu32i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 Sf_L_BFu32i) C1{ FC2{} FL Fi:32}



static void Test_Sf_L_BFu32i()
{
  {
    init_simple_test("Sf_L_BFu32i");
    static STRUCT_IF_C Sf_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_L_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu32i, Sf_L_BFu32i)
//============================================================================


struct  Sf_L_BFu32ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_L_BFu32ll) C1{ FC2{} FL FL:32}



static void Test_Sf_L_BFu32ll()
{
  {
    init_simple_test("Sf_L_BFu32ll");
    static STRUCT_IF_C Sf_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_L_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu32ll, Sf_L_BFu32ll)
//============================================================================


struct  Sf_L_BFu33  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_L_BFu33) C1{ FC2{} FL FL:33}



static void Test_Sf_L_BFu33()
{
  {
    init_simple_test("Sf_L_BFu33");
    static STRUCT_IF_C Sf_L_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Sf_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_L_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu33, Sf_L_BFu33)
//============================================================================


struct  Sf_L_BFu7c  {
  struct empty v1;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 Sf_L_BFu7c) C1{ FC2{} FL Fc:7}



static void Test_Sf_L_BFu7c()
{
  {
    init_simple_test("Sf_L_BFu7c");
    static STRUCT_IF_C Sf_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_L_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu7c, Sf_L_BFu7c)
//============================================================================


struct  Sf_L_BFu7i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 Sf_L_BFu7i) C1{ FC2{} FL Fi:7}



static void Test_Sf_L_BFu7i()
{
  {
    init_simple_test("Sf_L_BFu7i");
    static STRUCT_IF_C Sf_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_L_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu7i, Sf_L_BFu7i)
//============================================================================


struct  Sf_L_BFu7ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_L_BFu7ll) C1{ FC2{} FL FL:7}



static void Test_Sf_L_BFu7ll()
{
  {
    init_simple_test("Sf_L_BFu7ll");
    static STRUCT_IF_C Sf_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_L_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu7ll, Sf_L_BFu7ll)
//============================================================================


struct  Sf_L_BFu7s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 Sf_L_BFu7s) C1{ FC2{} FL Fs:7}



static void Test_Sf_L_BFu7s()
{
  {
    init_simple_test("Sf_L_BFu7s");
    static STRUCT_IF_C Sf_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_L_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu7s, Sf_L_BFu7s)
//============================================================================


struct  Sf_L_BFu8c  {
  struct empty v1;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 Sf_L_BFu8c) C1{ FC2{} FL Fc:8}



static void Test_Sf_L_BFu8c()
{
  {
    init_simple_test("Sf_L_BFu8c");
    static STRUCT_IF_C Sf_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_L_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu8c, Sf_L_BFu8c)
//============================================================================


struct  Sf_L_BFu8i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 Sf_L_BFu8i) C1{ FC2{} FL Fi:8}



static void Test_Sf_L_BFu8i()
{
  {
    init_simple_test("Sf_L_BFu8i");
    static STRUCT_IF_C Sf_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_L_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu8i, Sf_L_BFu8i)
//============================================================================


struct  Sf_L_BFu8ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_L_BFu8ll) C1{ FC2{} FL FL:8}



static void Test_Sf_L_BFu8ll()
{
  {
    init_simple_test("Sf_L_BFu8ll");
    static STRUCT_IF_C Sf_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_L_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu8ll, Sf_L_BFu8ll)
//============================================================================


struct  Sf_L_BFu8s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 Sf_L_BFu8s) C1{ FC2{} FL Fs:8}



static void Test_Sf_L_BFu8s()
{
  {
    init_simple_test("Sf_L_BFu8s");
    static STRUCT_IF_C Sf_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_L_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu8s, Sf_L_BFu8s)
//============================================================================


struct  Sf_L_BFu9i  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 Sf_L_BFu9i) C1{ FC2{} FL Fi:9}



static void Test_Sf_L_BFu9i()
{
  {
    init_simple_test("Sf_L_BFu9i");
    static STRUCT_IF_C Sf_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_L_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu9i, Sf_L_BFu9i)
//============================================================================


struct  Sf_L_BFu9ll  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_L_BFu9ll) C1{ FC2{} FL FL:9}



static void Test_Sf_L_BFu9ll()
{
  {
    init_simple_test("Sf_L_BFu9ll");
    static STRUCT_IF_C Sf_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_L_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu9ll, Sf_L_BFu9ll)
//============================================================================


struct  Sf_L_BFu9s  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 Sf_L_BFu9s) C1{ FC2{} FL Fs:9}



static void Test_Sf_L_BFu9s()
{
  {
    init_simple_test("Sf_L_BFu9s");
    static STRUCT_IF_C Sf_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_L_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_L_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_L_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_BFu9s, Sf_L_BFu9s)
//============================================================================


struct  Sf_L_C  {
  struct empty v1;
  __tsi64 v2;
  char v3;
};
//SIG(1 Sf_L_C) C1{ FC2{} FL Fc}



static void Test_Sf_L_C()
{
  {
    init_simple_test("Sf_L_C");
    STRUCT_IF_C Sf_L_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_C)");
    check_field_offset(lv, v1, 0, "Sf_L_C.v1");
    check_field_offset(lv, v2, 0, "Sf_L_C.v2");
    check_field_offset(lv, v3, 8, "Sf_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_C, Sf_L_C)
//============================================================================


struct  Sf_L_D  {
  struct empty v1;
  __tsi64 v2;
  double v3;
};
//SIG(1 Sf_L_D) C1{ FC2{} FL[2]}



static void Test_Sf_L_D()
{
  {
    init_simple_test("Sf_L_D");
    STRUCT_IF_C Sf_L_D lv;
    check2(sizeof(lv), 16, "sizeof(Sf_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_D)");
    check_field_offset(lv, v1, 0, "Sf_L_D.v1");
    check_field_offset(lv, v2, 0, "Sf_L_D.v2");
    check_field_offset(lv, v3, 8, "Sf_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_D, Sf_L_D)
//============================================================================


struct  Sf_L_F  {
  struct empty v1;
  __tsi64 v2;
  float v3;
};
//SIG(1 Sf_L_F) C1{ FC2{} FL Fi}



static void Test_Sf_L_F()
{
  {
    init_simple_test("Sf_L_F");
    STRUCT_IF_C Sf_L_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_F)");
    check_field_offset(lv, v1, 0, "Sf_L_F.v1");
    check_field_offset(lv, v2, 0, "Sf_L_F.v2");
    check_field_offset(lv, v3, 8, "Sf_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_F, Sf_L_F)
//============================================================================


struct  Sf_L_I  {
  struct empty v1;
  __tsi64 v2;
  int v3;
};
//SIG(1 Sf_L_I) C1{ FC2{} FL Fi}



static void Test_Sf_L_I()
{
  {
    init_simple_test("Sf_L_I");
    STRUCT_IF_C Sf_L_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_I)");
    check_field_offset(lv, v1, 0, "Sf_L_I.v1");
    check_field_offset(lv, v2, 0, "Sf_L_I.v2");
    check_field_offset(lv, v3, 8, "Sf_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_I, Sf_L_I)
//============================================================================


struct  Sf_L_Ip  {
  struct empty v1;
  __tsi64 v2;
  int *v3;
};
//SIG(1 Sf_L_Ip) C1{ FC2{} FL Fp}



static void Test_Sf_L_Ip()
{
  {
    init_simple_test("Sf_L_Ip");
    STRUCT_IF_C Sf_L_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Ip)");
    check_field_offset(lv, v1, 0, "Sf_L_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Ip, Sf_L_Ip)
//============================================================================


struct  Sf_L_L  {
  struct empty v1;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 Sf_L_L) C1{ FC2{} FL[2]}



static void Test_Sf_L_L()
{
  {
    init_simple_test("Sf_L_L");
    STRUCT_IF_C Sf_L_L lv;
    check2(sizeof(lv), 16, "sizeof(Sf_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_L)");
    check_field_offset(lv, v1, 0, "Sf_L_L.v1");
    check_field_offset(lv, v2, 0, "Sf_L_L.v2");
    check_field_offset(lv, v3, 8, "Sf_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_L, Sf_L_L)
//============================================================================


struct  Sf_L_S  {
  struct empty v1;
  __tsi64 v2;
  short v3;
};
//SIG(1 Sf_L_S) C1{ FC2{} FL Fs}



static void Test_Sf_L_S()
{
  {
    init_simple_test("Sf_L_S");
    STRUCT_IF_C Sf_L_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_S)");
    check_field_offset(lv, v1, 0, "Sf_L_S.v1");
    check_field_offset(lv, v2, 0, "Sf_L_S.v2");
    check_field_offset(lv, v3, 8, "Sf_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_S, Sf_L_S)
//============================================================================


struct  Sf_L_Sf  {
  struct empty v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Sf_L_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_L_Sf()
{
  {
    init_simple_test("Sf_L_Sf");
    STRUCT_IF_C Sf_L_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Sf_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Sf)");
    check_field_offset(lv, v1, 0, "Sf_L_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Sf, Sf_L_Sf)
//============================================================================


struct  Sf_L_Uc  {
  struct empty v1;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 Sf_L_Uc) C1{ FC2{} FL Fc}



static void Test_Sf_L_Uc()
{
  {
    init_simple_test("Sf_L_Uc");
    STRUCT_IF_C Sf_L_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Uc)");
    check_field_offset(lv, v1, 0, "Sf_L_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Uc, Sf_L_Uc)
//============================================================================


struct  Sf_L_Ui  {
  struct empty v1;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 Sf_L_Ui) C1{ FC2{} FL Fi}



static void Test_Sf_L_Ui()
{
  {
    init_simple_test("Sf_L_Ui");
    STRUCT_IF_C Sf_L_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Ui)");
    check_field_offset(lv, v1, 0, "Sf_L_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Ui, Sf_L_Ui)
//============================================================================


struct  Sf_L_Ul  {
  struct empty v1;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 Sf_L_Ul) C1{ FC2{} FL[2]}



static void Test_Sf_L_Ul()
{
  {
    init_simple_test("Sf_L_Ul");
    STRUCT_IF_C Sf_L_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Sf_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Ul)");
    check_field_offset(lv, v1, 0, "Sf_L_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Ul, Sf_L_Ul)
//============================================================================


struct  Sf_L_Us  {
  struct empty v1;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 Sf_L_Us) C1{ FC2{} FL Fs}



static void Test_Sf_L_Us()
{
  {
    init_simple_test("Sf_L_Us");
    STRUCT_IF_C Sf_L_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Us)");
    check_field_offset(lv, v1, 0, "Sf_L_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Us, Sf_L_Us)
//============================================================================


struct  Sf_L_Vp  {
  struct empty v1;
  __tsi64 v2;
  void *v3;
};
//SIG(1 Sf_L_Vp) C1{ FC2{} FL Fp}



static void Test_Sf_L_Vp()
{
  {
    init_simple_test("Sf_L_Vp");
    STRUCT_IF_C Sf_L_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_L_Vp)");
    check_field_offset(lv, v1, 0, "Sf_L_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_L_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_L_Vp, Sf_L_Vp)
//============================================================================


struct  Sf_S  {
  struct empty v1;
  short v2;
};
//SIG(1 Sf_S) C1{ FC2{} Fs}



static void Test_Sf_S()
{
  {
    init_simple_test("Sf_S");
    STRUCT_IF_C Sf_S lv;
    check2(sizeof(lv), 2, "sizeof(Sf_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S)");
    check_field_offset(lv, v1, 0, "Sf_S.v1");
    check_field_offset(lv, v2, 0, "Sf_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S, Sf_S)
//============================================================================


struct  Sf_S_BFu15i  {
  struct empty v1;
  short v2;
  unsigned int v3:15;
};
//SIG(1 Sf_S_BFu15i) C1{ FC2{} Fs Fi:15}



static void Test_Sf_S_BFu15i()
{
  {
    init_simple_test("Sf_S_BFu15i");
    static STRUCT_IF_C Sf_S_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_S_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu15i, Sf_S_BFu15i)
//============================================================================


struct  Sf_S_BFu15ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_S_BFu15ll) C1{ FC2{} Fs FL:15}



static void Test_Sf_S_BFu15ll()
{
  {
    init_simple_test("Sf_S_BFu15ll");
    static STRUCT_IF_C Sf_S_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_S_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu15ll, Sf_S_BFu15ll)
//============================================================================


struct  Sf_S_BFu15s  {
  struct empty v1;
  short v2;
  unsigned short v3:15;
};
//SIG(1 Sf_S_BFu15s) C1{ FC2{} Fs Fs:15}



static void Test_Sf_S_BFu15s()
{
  {
    init_simple_test("Sf_S_BFu15s");
    static STRUCT_IF_C Sf_S_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_S_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu15s, Sf_S_BFu15s)
//============================================================================


struct  Sf_S_BFu16i  {
  struct empty v1;
  short v2;
  unsigned int v3:16;
};
//SIG(1 Sf_S_BFu16i) C1{ FC2{} Fs Fi:16}



static void Test_Sf_S_BFu16i()
{
  {
    init_simple_test("Sf_S_BFu16i");
    static STRUCT_IF_C Sf_S_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_S_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu16i, Sf_S_BFu16i)
//============================================================================


struct  Sf_S_BFu16ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_S_BFu16ll) C1{ FC2{} Fs FL:16}



static void Test_Sf_S_BFu16ll()
{
  {
    init_simple_test("Sf_S_BFu16ll");
    static STRUCT_IF_C Sf_S_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_S_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu16ll, Sf_S_BFu16ll)
//============================================================================


struct  Sf_S_BFu16s  {
  struct empty v1;
  short v2;
  unsigned short v3:16;
};
//SIG(1 Sf_S_BFu16s) C1{ FC2{} Fs Fs:16}



static void Test_Sf_S_BFu16s()
{
  {
    init_simple_test("Sf_S_BFu16s");
    static STRUCT_IF_C Sf_S_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_S_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu16s, Sf_S_BFu16s)
//============================================================================


struct  Sf_S_BFu17i  {
  struct empty v1;
  short v2;
  unsigned int v3:17;
};
//SIG(1 Sf_S_BFu17i) C1{ FC2{} Fs Fi:17}



static void Test_Sf_S_BFu17i()
{
  {
    init_simple_test("Sf_S_BFu17i");
    static STRUCT_IF_C Sf_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu17i, Sf_S_BFu17i)
//============================================================================


struct  Sf_S_BFu17ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_S_BFu17ll) C1{ FC2{} Fs FL:17}



static void Test_Sf_S_BFu17ll()
{
  {
    init_simple_test("Sf_S_BFu17ll");
    static STRUCT_IF_C Sf_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_S_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu17ll, Sf_S_BFu17ll)
//============================================================================


struct  Sf_S_BFu1c  {
  struct empty v1;
  short v2;
  unsigned char v3:1;
};
//SIG(1 Sf_S_BFu1c) C1{ FC2{} Fs Fc:1}



static void Test_Sf_S_BFu1c()
{
  {
    init_simple_test("Sf_S_BFu1c");
    static STRUCT_IF_C Sf_S_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu1c, Sf_S_BFu1c)
//============================================================================


struct  Sf_S_BFu1i  {
  struct empty v1;
  short v2;
  unsigned int v3:1;
};
//SIG(1 Sf_S_BFu1i) C1{ FC2{} Fs Fi:1}



static void Test_Sf_S_BFu1i()
{
  {
    init_simple_test("Sf_S_BFu1i");
    static STRUCT_IF_C Sf_S_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu1i, Sf_S_BFu1i)
//============================================================================


struct  Sf_S_BFu1ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_S_BFu1ll) C1{ FC2{} Fs FL:1}



static void Test_Sf_S_BFu1ll()
{
  {
    init_simple_test("Sf_S_BFu1ll");
    static STRUCT_IF_C Sf_S_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu1ll, Sf_S_BFu1ll)
//============================================================================


struct  Sf_S_BFu1s  {
  struct empty v1;
  short v2;
  unsigned short v3:1;
};
//SIG(1 Sf_S_BFu1s) C1{ FC2{} Fs Fs:1}



static void Test_Sf_S_BFu1s()
{
  {
    init_simple_test("Sf_S_BFu1s");
    static STRUCT_IF_C Sf_S_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu1s, Sf_S_BFu1s)
//============================================================================


struct  Sf_S_BFu31i  {
  struct empty v1;
  short v2;
  unsigned int v3:31;
};
//SIG(1 Sf_S_BFu31i) C1{ FC2{} Fs Fi:31}



static void Test_Sf_S_BFu31i()
{
  {
    init_simple_test("Sf_S_BFu31i");
    static STRUCT_IF_C Sf_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu31i, Sf_S_BFu31i)
//============================================================================


struct  Sf_S_BFu31ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_S_BFu31ll) C1{ FC2{} Fs FL:31}



static void Test_Sf_S_BFu31ll()
{
  {
    init_simple_test("Sf_S_BFu31ll");
    static STRUCT_IF_C Sf_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_S_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu31ll, Sf_S_BFu31ll)
//============================================================================


struct  Sf_S_BFu32i  {
  struct empty v1;
  short v2;
  unsigned int v3:32;
};
//SIG(1 Sf_S_BFu32i) C1{ FC2{} Fs Fi:32}



static void Test_Sf_S_BFu32i()
{
  {
    init_simple_test("Sf_S_BFu32i");
    static STRUCT_IF_C Sf_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu32i, Sf_S_BFu32i)
//============================================================================


struct  Sf_S_BFu32ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_S_BFu32ll) C1{ FC2{} Fs FL:32}



static void Test_Sf_S_BFu32ll()
{
  {
    init_simple_test("Sf_S_BFu32ll");
    static STRUCT_IF_C Sf_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_S_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu32ll, Sf_S_BFu32ll)
//============================================================================


struct  Sf_S_BFu33  {
  struct empty v1;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_S_BFu33) C1{ FC2{} Fs FL:33}



static void Test_Sf_S_BFu33()
{
  {
    init_simple_test("Sf_S_BFu33");
    static STRUCT_IF_C Sf_S_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_S_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu33, Sf_S_BFu33)
//============================================================================


struct  Sf_S_BFu7c  {
  struct empty v1;
  short v2;
  unsigned char v3:7;
};
//SIG(1 Sf_S_BFu7c) C1{ FC2{} Fs Fc:7}



static void Test_Sf_S_BFu7c()
{
  {
    init_simple_test("Sf_S_BFu7c");
    static STRUCT_IF_C Sf_S_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_S_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu7c, Sf_S_BFu7c)
//============================================================================


struct  Sf_S_BFu7i  {
  struct empty v1;
  short v2;
  unsigned int v3:7;
};
//SIG(1 Sf_S_BFu7i) C1{ FC2{} Fs Fi:7}



static void Test_Sf_S_BFu7i()
{
  {
    init_simple_test("Sf_S_BFu7i");
    static STRUCT_IF_C Sf_S_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_S_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu7i, Sf_S_BFu7i)
//============================================================================


struct  Sf_S_BFu7ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_S_BFu7ll) C1{ FC2{} Fs FL:7}



static void Test_Sf_S_BFu7ll()
{
  {
    init_simple_test("Sf_S_BFu7ll");
    static STRUCT_IF_C Sf_S_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_S_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu7ll, Sf_S_BFu7ll)
//============================================================================


struct  Sf_S_BFu7s  {
  struct empty v1;
  short v2;
  unsigned short v3:7;
};
//SIG(1 Sf_S_BFu7s) C1{ FC2{} Fs Fs:7}



static void Test_Sf_S_BFu7s()
{
  {
    init_simple_test("Sf_S_BFu7s");
    static STRUCT_IF_C Sf_S_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_S_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu7s, Sf_S_BFu7s)
//============================================================================


struct  Sf_S_BFu8c  {
  struct empty v1;
  short v2;
  unsigned char v3:8;
};
//SIG(1 Sf_S_BFu8c) C1{ FC2{} Fs Fc:8}



static void Test_Sf_S_BFu8c()
{
  {
    init_simple_test("Sf_S_BFu8c");
    static STRUCT_IF_C Sf_S_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_S_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu8c, Sf_S_BFu8c)
//============================================================================


struct  Sf_S_BFu8i  {
  struct empty v1;
  short v2;
  unsigned int v3:8;
};
//SIG(1 Sf_S_BFu8i) C1{ FC2{} Fs Fi:8}



static void Test_Sf_S_BFu8i()
{
  {
    init_simple_test("Sf_S_BFu8i");
    static STRUCT_IF_C Sf_S_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_S_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu8i, Sf_S_BFu8i)
//============================================================================


struct  Sf_S_BFu8ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_S_BFu8ll) C1{ FC2{} Fs FL:8}



static void Test_Sf_S_BFu8ll()
{
  {
    init_simple_test("Sf_S_BFu8ll");
    static STRUCT_IF_C Sf_S_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_S_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu8ll, Sf_S_BFu8ll)
//============================================================================


struct  Sf_S_BFu8s  {
  struct empty v1;
  short v2;
  unsigned short v3:8;
};
//SIG(1 Sf_S_BFu8s) C1{ FC2{} Fs Fs:8}



static void Test_Sf_S_BFu8s()
{
  {
    init_simple_test("Sf_S_BFu8s");
    static STRUCT_IF_C Sf_S_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_S_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu8s, Sf_S_BFu8s)
//============================================================================


struct  Sf_S_BFu9i  {
  struct empty v1;
  short v2;
  unsigned int v3:9;
};
//SIG(1 Sf_S_BFu9i) C1{ FC2{} Fs Fi:9}



static void Test_Sf_S_BFu9i()
{
  {
    init_simple_test("Sf_S_BFu9i");
    static STRUCT_IF_C Sf_S_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_S_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu9i, Sf_S_BFu9i)
//============================================================================


struct  Sf_S_BFu9ll  {
  struct empty v1;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_S_BFu9ll) C1{ FC2{} Fs FL:9}



static void Test_Sf_S_BFu9ll()
{
  {
    init_simple_test("Sf_S_BFu9ll");
    static STRUCT_IF_C Sf_S_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_S_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu9ll, Sf_S_BFu9ll)
//============================================================================


struct  Sf_S_BFu9s  {
  struct empty v1;
  short v2;
  unsigned short v3:9;
};
//SIG(1 Sf_S_BFu9s) C1{ FC2{} Fs Fs:9}



static void Test_Sf_S_BFu9s()
{
  {
    init_simple_test("Sf_S_BFu9s");
    static STRUCT_IF_C Sf_S_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_S_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_S_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_BFu9s, Sf_S_BFu9s)
//============================================================================


struct  Sf_S_C  {
  struct empty v1;
  short v2;
  char v3;
};
//SIG(1 Sf_S_C) C1{ FC2{} Fs Fc}



static void Test_Sf_S_C()
{
  {
    init_simple_test("Sf_S_C");
    STRUCT_IF_C Sf_S_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_C)");
    check_field_offset(lv, v1, 0, "Sf_S_C.v1");
    check_field_offset(lv, v2, 0, "Sf_S_C.v2");
    check_field_offset(lv, v3, 2, "Sf_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_C, Sf_S_C)
//============================================================================


struct  Sf_S_D  {
  struct empty v1;
  short v2;
  double v3;
};
//SIG(1 Sf_S_D) C1{ FC2{} Fs FL}



static void Test_Sf_S_D()
{
  {
    init_simple_test("Sf_S_D");
    STRUCT_IF_C Sf_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_D)");
    check_field_offset(lv, v1, 0, "Sf_S_D.v1");
    check_field_offset(lv, v2, 0, "Sf_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_D, Sf_S_D)
//============================================================================


struct  Sf_S_F  {
  struct empty v1;
  short v2;
  float v3;
};
//SIG(1 Sf_S_F) C1{ FC2{} Fs Fi}



static void Test_Sf_S_F()
{
  {
    init_simple_test("Sf_S_F");
    STRUCT_IF_C Sf_S_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_F)");
    check_field_offset(lv, v1, 0, "Sf_S_F.v1");
    check_field_offset(lv, v2, 0, "Sf_S_F.v2");
    check_field_offset(lv, v3, 4, "Sf_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_F, Sf_S_F)
//============================================================================


struct  Sf_S_I  {
  struct empty v1;
  short v2;
  int v3;
};
//SIG(1 Sf_S_I) C1{ FC2{} Fs Fi}



static void Test_Sf_S_I()
{
  {
    init_simple_test("Sf_S_I");
    STRUCT_IF_C Sf_S_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_I)");
    check_field_offset(lv, v1, 0, "Sf_S_I.v1");
    check_field_offset(lv, v2, 0, "Sf_S_I.v2");
    check_field_offset(lv, v3, 4, "Sf_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_I, Sf_S_I)
//============================================================================


struct  Sf_S_Ip  {
  struct empty v1;
  short v2;
  int *v3;
};
//SIG(1 Sf_S_Ip) C1{ FC2{} Fs Fp}



static void Test_Sf_S_Ip()
{
  {
    init_simple_test("Sf_S_Ip");
    STRUCT_IF_C Sf_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_Ip)");
    check_field_offset(lv, v1, 0, "Sf_S_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Ip, Sf_S_Ip)
//============================================================================


struct  Sf_S_L  {
  struct empty v1;
  short v2;
  __tsi64 v3;
};
//SIG(1 Sf_S_L) C1{ FC2{} Fs FL}



static void Test_Sf_S_L()
{
  {
    init_simple_test("Sf_S_L");
    STRUCT_IF_C Sf_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_L)");
    check_field_offset(lv, v1, 0, "Sf_S_L.v1");
    check_field_offset(lv, v2, 0, "Sf_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_L, Sf_S_L)
//============================================================================


struct  Sf_S_S  {
  struct empty v1;
  short v2;
  short v3;
};
//SIG(1 Sf_S_S) C1{ FC2{} Fs[2]}



static void Test_Sf_S_S()
{
  {
    init_simple_test("Sf_S_S");
    STRUCT_IF_C Sf_S_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_S)");
    check_field_offset(lv, v1, 0, "Sf_S_S.v1");
    check_field_offset(lv, v2, 0, "Sf_S_S.v2");
    check_field_offset(lv, v3, 2, "Sf_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_S, Sf_S_S)
//============================================================================


struct  Sf_S_Sf  {
  struct empty v1;
  short v2;
  struct empty v3;
};
//SIG(1 Sf_S_Sf) C1{ FC2{} Fs FC2}



static void Test_Sf_S_Sf()
{
  {
    init_simple_test("Sf_S_Sf");
    STRUCT_IF_C Sf_S_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_S_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_Sf)");
    check_field_offset(lv, v1, 0, "Sf_S_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Sf.v2");
    check_field_offset(lv, v3, 2, "Sf_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Sf, Sf_S_Sf)
//============================================================================


struct  Sf_S_Uc  {
  struct empty v1;
  short v2;
  unsigned char v3;
};
//SIG(1 Sf_S_Uc) C1{ FC2{} Fs Fc}



static void Test_Sf_S_Uc()
{
  {
    init_simple_test("Sf_S_Uc");
    STRUCT_IF_C Sf_S_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_Uc)");
    check_field_offset(lv, v1, 0, "Sf_S_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Uc.v2");
    check_field_offset(lv, v3, 2, "Sf_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Uc, Sf_S_Uc)
//============================================================================


struct  Sf_S_Ui  {
  struct empty v1;
  short v2;
  unsigned int v3;
};
//SIG(1 Sf_S_Ui) C1{ FC2{} Fs Fi}



static void Test_Sf_S_Ui()
{
  {
    init_simple_test("Sf_S_Ui");
    STRUCT_IF_C Sf_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_S_Ui)");
    check_field_offset(lv, v1, 0, "Sf_S_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Ui, Sf_S_Ui)
//============================================================================


struct  Sf_S_Ul  {
  struct empty v1;
  short v2;
  __tsu64 v3;
};
//SIG(1 Sf_S_Ul) C1{ FC2{} Fs FL}



static void Test_Sf_S_Ul()
{
  {
    init_simple_test("Sf_S_Ul");
    STRUCT_IF_C Sf_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_Ul)");
    check_field_offset(lv, v1, 0, "Sf_S_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Ul, Sf_S_Ul)
//============================================================================


struct  Sf_S_Us  {
  struct empty v1;
  short v2;
  unsigned short v3;
};
//SIG(1 Sf_S_Us) C1{ FC2{} Fs[2]}



static void Test_Sf_S_Us()
{
  {
    init_simple_test("Sf_S_Us");
    STRUCT_IF_C Sf_S_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_S_Us)");
    check_field_offset(lv, v1, 0, "Sf_S_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Us, Sf_S_Us)
//============================================================================


struct  Sf_S_Vp  {
  struct empty v1;
  short v2;
  void *v3;
};
//SIG(1 Sf_S_Vp) C1{ FC2{} Fs Fp}



static void Test_Sf_S_Vp()
{
  {
    init_simple_test("Sf_S_Vp");
    STRUCT_IF_C Sf_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_S_Vp)");
    check_field_offset(lv, v1, 0, "Sf_S_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_S_Vp, Sf_S_Vp)
//============================================================================


struct  Sf_Sf  {
  struct empty v1;
  struct empty v2;
};
//SIG(1 Sf_Sf) C1{ FC2{} FC2}



static void Test_Sf_Sf()
{
  {
    init_simple_test("Sf_Sf");
    STRUCT_IF_C Sf_Sf lv;
    check2(sizeof(lv), 0, "sizeof(Sf_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf, Sf_Sf)
//============================================================================


struct  Sf_Sf_BFu15i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Sf_BFu15i) C1{ FC2{} FC2 Fi:15}



static void Test_Sf_Sf_BFu15i()
{
  {
    init_simple_test("Sf_Sf_BFu15i");
    static STRUCT_IF_C Sf_Sf_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 0, 0, 15, 1, "Sf_Sf_BFu15i");
    set_bf_and_test(lv, v3, 0, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu15i, Sf_Sf_BFu15i)
//============================================================================


struct  Sf_Sf_BFu15ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Sf_BFu15ll) C1{ FC2{} FC2 FL:15}



static void Test_Sf_Sf_BFu15ll()
{
  {
    init_simple_test("Sf_Sf_BFu15ll");
    static STRUCT_IF_C Sf_Sf_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 15, 1, "Sf_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 0, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu15ll, Sf_Sf_BFu15ll)
//============================================================================


struct  Sf_Sf_BFu15s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Sf_BFu15s) C1{ FC2{} FC2 Fs:15}



static void Test_Sf_Sf_BFu15s()
{
  {
    init_simple_test("Sf_Sf_BFu15s");
    static STRUCT_IF_C Sf_Sf_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 0, 0, 15, 1, "Sf_Sf_BFu15s");
    set_bf_and_test(lv, v3, 0, 0, 15, hide_ull(1LL<<14), "Sf_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu15s, Sf_Sf_BFu15s)
//============================================================================


struct  Sf_Sf_BFu16i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Sf_BFu16i) C1{ FC2{} FC2 Fi:16}



static void Test_Sf_Sf_BFu16i()
{
  {
    init_simple_test("Sf_Sf_BFu16i");
    static STRUCT_IF_C Sf_Sf_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 0, 0, 16, 1, "Sf_Sf_BFu16i");
    set_bf_and_test(lv, v3, 0, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu16i, Sf_Sf_BFu16i)
//============================================================================


struct  Sf_Sf_BFu16ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Sf_BFu16ll) C1{ FC2{} FC2 FL:16}



static void Test_Sf_Sf_BFu16ll()
{
  {
    init_simple_test("Sf_Sf_BFu16ll");
    static STRUCT_IF_C Sf_Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 16, 1, "Sf_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 0, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu16ll, Sf_Sf_BFu16ll)
//============================================================================


struct  Sf_Sf_BFu16s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Sf_BFu16s) C1{ FC2{} FC2 Fs:16}



static void Test_Sf_Sf_BFu16s()
{
  {
    init_simple_test("Sf_Sf_BFu16s");
    static STRUCT_IF_C Sf_Sf_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 0, 0, 16, 1, "Sf_Sf_BFu16s");
    set_bf_and_test(lv, v3, 0, 0, 16, hide_ull(1LL<<15), "Sf_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu16s, Sf_Sf_BFu16s)
//============================================================================


struct  Sf_Sf_BFu17i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Sf_BFu17i) C1{ FC2{} FC2 Fi:17}



static void Test_Sf_Sf_BFu17i()
{
  {
    init_simple_test("Sf_Sf_BFu17i");
    static STRUCT_IF_C Sf_Sf_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 0, 0, 17, 1, "Sf_Sf_BFu17i");
    set_bf_and_test(lv, v3, 0, 0, 17, hide_ull(1LL<<16), "Sf_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu17i, Sf_Sf_BFu17i)
//============================================================================


struct  Sf_Sf_BFu17ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Sf_BFu17ll) C1{ FC2{} FC2 FL:17}



static void Test_Sf_Sf_BFu17ll()
{
  {
    init_simple_test("Sf_Sf_BFu17ll");
    static STRUCT_IF_C Sf_Sf_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 17, 1, "Sf_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 0, 0, 17, hide_ull(1LL<<16), "Sf_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu17ll, Sf_Sf_BFu17ll)
//============================================================================


struct  Sf_Sf_BFu1c  {
  struct empty v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Sf_BFu1c) C1{ FC2{} FC2 Fc:1}



static void Test_Sf_Sf_BFu1c()
{
  {
    init_simple_test("Sf_Sf_BFu1c");
    static STRUCT_IF_C Sf_Sf_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Sf_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 0, 0, 1, 1, "Sf_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu1c, Sf_Sf_BFu1c)
//============================================================================


struct  Sf_Sf_BFu1i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Sf_BFu1i) C1{ FC2{} FC2 Fi:1}



static void Test_Sf_Sf_BFu1i()
{
  {
    init_simple_test("Sf_Sf_BFu1i");
    static STRUCT_IF_C Sf_Sf_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 0, 0, 1, 1, "Sf_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu1i, Sf_Sf_BFu1i)
//============================================================================


struct  Sf_Sf_BFu1ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Sf_BFu1ll) C1{ FC2{} FC2 FL:1}



static void Test_Sf_Sf_BFu1ll()
{
  {
    init_simple_test("Sf_Sf_BFu1ll");
    static STRUCT_IF_C Sf_Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 1, 1, "Sf_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu1ll, Sf_Sf_BFu1ll)
//============================================================================


struct  Sf_Sf_BFu1s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Sf_BFu1s) C1{ FC2{} FC2 Fs:1}



static void Test_Sf_Sf_BFu1s()
{
  {
    init_simple_test("Sf_Sf_BFu1s");
    static STRUCT_IF_C Sf_Sf_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 0, 0, 1, 1, "Sf_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu1s, Sf_Sf_BFu1s)
//============================================================================


struct  Sf_Sf_BFu31i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Sf_BFu31i) C1{ FC2{} FC2 Fi:31}



static void Test_Sf_Sf_BFu31i()
{
  {
    init_simple_test("Sf_Sf_BFu31i");
    static STRUCT_IF_C Sf_Sf_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 0, 0, 31, 1, "Sf_Sf_BFu31i");
    set_bf_and_test(lv, v3, 0, 0, 31, hide_ull(1LL<<30), "Sf_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu31i, Sf_Sf_BFu31i)
//============================================================================


struct  Sf_Sf_BFu31ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Sf_BFu31ll) C1{ FC2{} FC2 FL:31}



static void Test_Sf_Sf_BFu31ll()
{
  {
    init_simple_test("Sf_Sf_BFu31ll");
    static STRUCT_IF_C Sf_Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 31, 1, "Sf_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 0, 0, 31, hide_ull(1LL<<30), "Sf_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu31ll, Sf_Sf_BFu31ll)
//============================================================================


struct  Sf_Sf_BFu32i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Sf_BFu32i) C1{ FC2{} FC2 Fi:32}



static void Test_Sf_Sf_BFu32i()
{
  {
    init_simple_test("Sf_Sf_BFu32i");
    static STRUCT_IF_C Sf_Sf_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 0, 0, 32, 1, "Sf_Sf_BFu32i");
    set_bf_and_test(lv, v3, 0, 0, 32, hide_ull(1LL<<31), "Sf_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu32i, Sf_Sf_BFu32i)
//============================================================================


struct  Sf_Sf_BFu32ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Sf_BFu32ll) C1{ FC2{} FC2 FL:32}



static void Test_Sf_Sf_BFu32ll()
{
  {
    init_simple_test("Sf_Sf_BFu32ll");
    static STRUCT_IF_C Sf_Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 32, 1, "Sf_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 0, 0, 32, hide_ull(1LL<<31), "Sf_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu32ll, Sf_Sf_BFu32ll)
//============================================================================


struct  Sf_Sf_BFu33  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Sf_BFu33) C1{ FC2{} FC2 FL:33}



static void Test_Sf_Sf_BFu33()
{
  {
    init_simple_test("Sf_Sf_BFu33");
    static STRUCT_IF_C Sf_Sf_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, 0, 0, 33, 1, "Sf_Sf_BFu33");
    set_bf_and_test(lv, v3, 0, 0, 33, hide_ull(1LL<<32), "Sf_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu33, Sf_Sf_BFu33)
//============================================================================


struct  Sf_Sf_BFu7c  {
  struct empty v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Sf_BFu7c) C1{ FC2{} FC2 Fc:7}



static void Test_Sf_Sf_BFu7c()
{
  {
    init_simple_test("Sf_Sf_BFu7c");
    static STRUCT_IF_C Sf_Sf_BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Sf_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 0, 0, 7, 1, "Sf_Sf_BFu7c");
    set_bf_and_test(lv, v3, 0, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu7c, Sf_Sf_BFu7c)
//============================================================================


struct  Sf_Sf_BFu7i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Sf_BFu7i) C1{ FC2{} FC2 Fi:7}



static void Test_Sf_Sf_BFu7i()
{
  {
    init_simple_test("Sf_Sf_BFu7i");
    static STRUCT_IF_C Sf_Sf_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 0, 0, 7, 1, "Sf_Sf_BFu7i");
    set_bf_and_test(lv, v3, 0, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu7i, Sf_Sf_BFu7i)
//============================================================================


struct  Sf_Sf_BFu7ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Sf_BFu7ll) C1{ FC2{} FC2 FL:7}



static void Test_Sf_Sf_BFu7ll()
{
  {
    init_simple_test("Sf_Sf_BFu7ll");
    static STRUCT_IF_C Sf_Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 7, 1, "Sf_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 0, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu7ll, Sf_Sf_BFu7ll)
//============================================================================


struct  Sf_Sf_BFu7s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Sf_BFu7s) C1{ FC2{} FC2 Fs:7}



static void Test_Sf_Sf_BFu7s()
{
  {
    init_simple_test("Sf_Sf_BFu7s");
    static STRUCT_IF_C Sf_Sf_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 0, 0, 7, 1, "Sf_Sf_BFu7s");
    set_bf_and_test(lv, v3, 0, 0, 7, hide_ull(1LL<<6), "Sf_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu7s, Sf_Sf_BFu7s)
//============================================================================


struct  Sf_Sf_BFu8c  {
  struct empty v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Sf_BFu8c) C1{ FC2{} FC2 Fc:8}



static void Test_Sf_Sf_BFu8c()
{
  {
    init_simple_test("Sf_Sf_BFu8c");
    static STRUCT_IF_C Sf_Sf_BFu8c lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Sf_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 0, 0, 8, 1, "Sf_Sf_BFu8c");
    set_bf_and_test(lv, v3, 0, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu8c, Sf_Sf_BFu8c)
//============================================================================


struct  Sf_Sf_BFu8i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Sf_BFu8i) C1{ FC2{} FC2 Fi:8}



static void Test_Sf_Sf_BFu8i()
{
  {
    init_simple_test("Sf_Sf_BFu8i");
    static STRUCT_IF_C Sf_Sf_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 0, 0, 8, 1, "Sf_Sf_BFu8i");
    set_bf_and_test(lv, v3, 0, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu8i, Sf_Sf_BFu8i)
//============================================================================


struct  Sf_Sf_BFu8ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Sf_BFu8ll) C1{ FC2{} FC2 FL:8}



static void Test_Sf_Sf_BFu8ll()
{
  {
    init_simple_test("Sf_Sf_BFu8ll");
    static STRUCT_IF_C Sf_Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 8, 1, "Sf_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 0, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu8ll, Sf_Sf_BFu8ll)
//============================================================================


struct  Sf_Sf_BFu8s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Sf_BFu8s) C1{ FC2{} FC2 Fs:8}



static void Test_Sf_Sf_BFu8s()
{
  {
    init_simple_test("Sf_Sf_BFu8s");
    static STRUCT_IF_C Sf_Sf_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 0, 0, 8, 1, "Sf_Sf_BFu8s");
    set_bf_and_test(lv, v3, 0, 0, 8, hide_ull(1LL<<7), "Sf_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu8s, Sf_Sf_BFu8s)
//============================================================================


struct  Sf_Sf_BFu9i  {
  struct empty v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Sf_BFu9i) C1{ FC2{} FC2 Fi:9}



static void Test_Sf_Sf_BFu9i()
{
  {
    init_simple_test("Sf_Sf_BFu9i");
    static STRUCT_IF_C Sf_Sf_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 0, 0, 9, 1, "Sf_Sf_BFu9i");
    set_bf_and_test(lv, v3, 0, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu9i, Sf_Sf_BFu9i)
//============================================================================


struct  Sf_Sf_BFu9ll  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Sf_BFu9ll) C1{ FC2{} FC2 FL:9}



static void Test_Sf_Sf_BFu9ll()
{
  {
    init_simple_test("Sf_Sf_BFu9ll");
    static STRUCT_IF_C Sf_Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 0, 0, 9, 1, "Sf_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 0, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu9ll, Sf_Sf_BFu9ll)
//============================================================================


struct  Sf_Sf_BFu9s  {
  struct empty v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Sf_BFu9s) C1{ FC2{} FC2 Fs:9}



static void Test_Sf_Sf_BFu9s()
{
  {
    init_simple_test("Sf_Sf_BFu9s");
    static STRUCT_IF_C Sf_Sf_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Sf_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 0, 0, 9, 1, "Sf_Sf_BFu9s");
    set_bf_and_test(lv, v3, 0, 0, 9, hide_ull(1LL<<8), "Sf_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_BFu9s, Sf_Sf_BFu9s)
//============================================================================


struct  Sf_Sf_C  {
  struct empty v1;
  struct empty v2;
  char v3;
};
//SIG(1 Sf_Sf_C) C1{ FC2{} FC2 Fc}



static void Test_Sf_Sf_C()
{
  {
    init_simple_test("Sf_Sf_C");
    STRUCT_IF_C Sf_Sf_C lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Sf_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_C)");
    check_field_offset(lv, v1, 0, "Sf_Sf_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_C.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_C, Sf_Sf_C)
//============================================================================


struct  Sf_Sf_D  {
  struct empty v1;
  struct empty v2;
  double v3;
};
//SIG(1 Sf_Sf_D) C1{ FC2{} FC2 FL}



static void Test_Sf_Sf_D()
{
  {
    init_simple_test("Sf_Sf_D");
    STRUCT_IF_C Sf_Sf_D lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_D)");
    check_field_offset(lv, v1, 0, "Sf_Sf_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_D.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_D, Sf_Sf_D)
//============================================================================


struct  Sf_Sf_F  {
  struct empty v1;
  struct empty v2;
  float v3;
};
//SIG(1 Sf_Sf_F) C1{ FC2{} FC2 Fi}



static void Test_Sf_Sf_F()
{
  {
    init_simple_test("Sf_Sf_F");
    STRUCT_IF_C Sf_Sf_F lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_F)");
    check_field_offset(lv, v1, 0, "Sf_Sf_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_F.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_F, Sf_Sf_F)
//============================================================================


struct  Sf_Sf_I  {
  struct empty v1;
  struct empty v2;
  int v3;
};
//SIG(1 Sf_Sf_I) C1{ FC2{} FC2 Fi}



static void Test_Sf_Sf_I()
{
  {
    init_simple_test("Sf_Sf_I");
    STRUCT_IF_C Sf_Sf_I lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_I)");
    check_field_offset(lv, v1, 0, "Sf_Sf_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_I.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_I, Sf_Sf_I)
//============================================================================


struct  Sf_Sf_Ip  {
  struct empty v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Sf_Sf_Ip) C1{ FC2{} FC2 Fp}



static void Test_Sf_Sf_Ip()
{
  {
    init_simple_test("Sf_Sf_Ip");
    STRUCT_IF_C Sf_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Ip.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Ip, Sf_Sf_Ip)
//============================================================================


struct  Sf_Sf_L  {
  struct empty v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Sf_Sf_L) C1{ FC2{} FC2 FL}



static void Test_Sf_Sf_L()
{
  {
    init_simple_test("Sf_Sf_L");
    STRUCT_IF_C Sf_Sf_L lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_L)");
    check_field_offset(lv, v1, 0, "Sf_Sf_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_L.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_L, Sf_Sf_L)
//============================================================================


struct  Sf_Sf_S  {
  struct empty v1;
  struct empty v2;
  short v3;
};
//SIG(1 Sf_Sf_S) C1{ FC2{} FC2 Fs}



static void Test_Sf_Sf_S()
{
  {
    init_simple_test("Sf_Sf_S");
    STRUCT_IF_C Sf_Sf_S lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_S)");
    check_field_offset(lv, v1, 0, "Sf_Sf_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_S.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_S, Sf_Sf_S)
//============================================================================


struct  Sf_Sf_Sf  {
  struct empty v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Sf_Sf_Sf) C1{ FC2{} FC2 FC2}



static void Test_Sf_Sf_Sf()
{
  {
    init_simple_test("Sf_Sf_Sf");
    STRUCT_IF_C Sf_Sf_Sf lv;
    check2(sizeof(lv), 0, "sizeof(Sf_Sf_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Sf.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Sf, Sf_Sf_Sf)
//============================================================================


struct  Sf_Sf_Uc  {
  struct empty v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Sf_Sf_Uc) C1{ FC2{} FC2 Fc}



static void Test_Sf_Sf_Uc()
{
  {
    init_simple_test("Sf_Sf_Uc");
    STRUCT_IF_C Sf_Sf_Uc lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Sf_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Uc.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Uc, Sf_Sf_Uc)
//============================================================================


struct  Sf_Sf_Ui  {
  struct empty v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Sf_Sf_Ui) C1{ FC2{} FC2 Fi}



static void Test_Sf_Sf_Ui()
{
  {
    init_simple_test("Sf_Sf_Ui");
    STRUCT_IF_C Sf_Sf_Ui lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Ui.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Ui, Sf_Sf_Ui)
//============================================================================


struct  Sf_Sf_Ul  {
  struct empty v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Sf_Sf_Ul) C1{ FC2{} FC2 FL}



static void Test_Sf_Sf_Ul()
{
  {
    init_simple_test("Sf_Sf_Ul");
    STRUCT_IF_C Sf_Sf_Ul lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Ul.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Ul, Sf_Sf_Ul)
//============================================================================


struct  Sf_Sf_Us  {
  struct empty v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Sf_Sf_Us) C1{ FC2{} FC2 Fs}



static void Test_Sf_Sf_Us()
{
  {
    init_simple_test("Sf_Sf_Us");
    STRUCT_IF_C Sf_Sf_Us lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Sf_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Sf_Us)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Us.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Us, Sf_Sf_Us)
//============================================================================


struct  Sf_Sf_Vp  {
  struct empty v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Sf_Sf_Vp) C1{ FC2{} FC2 Fp}



static void Test_Sf_Sf_Vp()
{
  {
    init_simple_test("Sf_Sf_Vp");
    STRUCT_IF_C Sf_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Sf_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Sf_Vp.v2");
    check_field_offset(lv, v3, 0, "Sf_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Sf_Vp, Sf_Sf_Vp)
//============================================================================


struct  Sf_Uc  {
  struct empty v1;
  unsigned char v2;
};
//SIG(1 Sf_Uc) C1{ FC2{} Fc}



static void Test_Sf_Uc()
{
  {
    init_simple_test("Sf_Uc");
    STRUCT_IF_C Sf_Uc lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc, Sf_Uc)
//============================================================================


struct  Sf_Uc_BFu15i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Uc_BFu15i) C1{ FC2{} Fc Fi:15}



static void Test_Sf_Uc_BFu15i()
{
  {
    init_simple_test("Sf_Uc_BFu15i");
    static STRUCT_IF_C Sf_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_Uc_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu15i, Sf_Uc_BFu15i)
//============================================================================


struct  Sf_Uc_BFu15ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Uc_BFu15ll) C1{ FC2{} Fc FL:15}



static void Test_Sf_Uc_BFu15ll()
{
  {
    init_simple_test("Sf_Uc_BFu15ll");
    static STRUCT_IF_C Sf_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Sf_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Sf_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu15ll, Sf_Uc_BFu15ll)
//============================================================================


struct  Sf_Uc_BFu15s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Uc_BFu15s) C1{ FC2{} Fc Fs:15}



static void Test_Sf_Uc_BFu15s()
{
  {
    init_simple_test("Sf_Uc_BFu15s");
    static STRUCT_IF_C Sf_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu15s, Sf_Uc_BFu15s)
//============================================================================


struct  Sf_Uc_BFu16i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Uc_BFu16i) C1{ FC2{} Fc Fi:16}



static void Test_Sf_Uc_BFu16i()
{
  {
    init_simple_test("Sf_Uc_BFu16i");
    static STRUCT_IF_C Sf_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_Uc_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu16i, Sf_Uc_BFu16i)
//============================================================================


struct  Sf_Uc_BFu16ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Uc_BFu16ll) C1{ FC2{} Fc FL:16}



static void Test_Sf_Uc_BFu16ll()
{
  {
    init_simple_test("Sf_Uc_BFu16ll");
    static STRUCT_IF_C Sf_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Sf_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Sf_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu16ll, Sf_Uc_BFu16ll)
//============================================================================


struct  Sf_Uc_BFu16s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Uc_BFu16s) C1{ FC2{} Fc Fs:16}



static void Test_Sf_Uc_BFu16s()
{
  {
    init_simple_test("Sf_Uc_BFu16s");
    static STRUCT_IF_C Sf_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu16s, Sf_Uc_BFu16s)
//============================================================================


struct  Sf_Uc_BFu17i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Uc_BFu17i) C1{ FC2{} Fc Fi:17}



static void Test_Sf_Uc_BFu17i()
{
  {
    init_simple_test("Sf_Uc_BFu17i");
    static STRUCT_IF_C Sf_Uc_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_Uc_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu17i, Sf_Uc_BFu17i)
//============================================================================


struct  Sf_Uc_BFu17ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Uc_BFu17ll) C1{ FC2{} Fc FL:17}



static void Test_Sf_Uc_BFu17ll()
{
  {
    init_simple_test("Sf_Uc_BFu17ll");
    static STRUCT_IF_C Sf_Uc_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Sf_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Sf_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu17ll, Sf_Uc_BFu17ll)
//============================================================================


struct  Sf_Uc_BFu1c  {
  struct empty v1;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Uc_BFu1c) C1{ FC2{} Fc Fc:1}



static void Test_Sf_Uc_BFu1c()
{
  {
    init_simple_test("Sf_Uc_BFu1c");
    static STRUCT_IF_C Sf_Uc_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu1c, Sf_Uc_BFu1c)
//============================================================================


struct  Sf_Uc_BFu1i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Uc_BFu1i) C1{ FC2{} Fc Fi:1}



static void Test_Sf_Uc_BFu1i()
{
  {
    init_simple_test("Sf_Uc_BFu1i");
    static STRUCT_IF_C Sf_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu1i, Sf_Uc_BFu1i)
//============================================================================


struct  Sf_Uc_BFu1ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Uc_BFu1ll) C1{ FC2{} Fc FL:1}



static void Test_Sf_Uc_BFu1ll()
{
  {
    init_simple_test("Sf_Uc_BFu1ll");
    static STRUCT_IF_C Sf_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu1ll, Sf_Uc_BFu1ll)
//============================================================================


struct  Sf_Uc_BFu1s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Uc_BFu1s) C1{ FC2{} Fc Fs:1}



static void Test_Sf_Uc_BFu1s()
{
  {
    init_simple_test("Sf_Uc_BFu1s");
    static STRUCT_IF_C Sf_Uc_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Sf_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu1s, Sf_Uc_BFu1s)
//============================================================================


struct  Sf_Uc_BFu31i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Uc_BFu31i) C1{ FC2{} Fc Fi:31}



static void Test_Sf_Uc_BFu31i()
{
  {
    init_simple_test("Sf_Uc_BFu31i");
    static STRUCT_IF_C Sf_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu31i, Sf_Uc_BFu31i)
//============================================================================


struct  Sf_Uc_BFu31ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Uc_BFu31ll) C1{ FC2{} Fc FL:31}



static void Test_Sf_Uc_BFu31ll()
{
  {
    init_simple_test("Sf_Uc_BFu31ll");
    static STRUCT_IF_C Sf_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Sf_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Sf_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu31ll, Sf_Uc_BFu31ll)
//============================================================================


struct  Sf_Uc_BFu32i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Uc_BFu32i) C1{ FC2{} Fc Fi:32}



static void Test_Sf_Uc_BFu32i()
{
  {
    init_simple_test("Sf_Uc_BFu32i");
    static STRUCT_IF_C Sf_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu32i, Sf_Uc_BFu32i)
//============================================================================


struct  Sf_Uc_BFu32ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Uc_BFu32ll) C1{ FC2{} Fc FL:32}



static void Test_Sf_Uc_BFu32ll()
{
  {
    init_simple_test("Sf_Uc_BFu32ll");
    static STRUCT_IF_C Sf_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Sf_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Sf_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu32ll, Sf_Uc_BFu32ll)
//============================================================================


struct  Sf_Uc_BFu33  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Uc_BFu33) C1{ FC2{} Fc FL:33}



static void Test_Sf_Uc_BFu33()
{
  {
    init_simple_test("Sf_Uc_BFu33");
    static STRUCT_IF_C Sf_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Sf_Uc_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Sf_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu33, Sf_Uc_BFu33)
//============================================================================


struct  Sf_Uc_BFu7c  {
  struct empty v1;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Uc_BFu7c) C1{ FC2{} Fc Fc:7}



static void Test_Sf_Uc_BFu7c()
{
  {
    init_simple_test("Sf_Uc_BFu7c");
    static STRUCT_IF_C Sf_Uc_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_Uc_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu7c, Sf_Uc_BFu7c)
//============================================================================


struct  Sf_Uc_BFu7i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Uc_BFu7i) C1{ FC2{} Fc Fi:7}



static void Test_Sf_Uc_BFu7i()
{
  {
    init_simple_test("Sf_Uc_BFu7i");
    static STRUCT_IF_C Sf_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_Uc_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu7i, Sf_Uc_BFu7i)
//============================================================================


struct  Sf_Uc_BFu7ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Uc_BFu7ll) C1{ FC2{} Fc FL:7}



static void Test_Sf_Uc_BFu7ll()
{
  {
    init_simple_test("Sf_Uc_BFu7ll");
    static STRUCT_IF_C Sf_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu7ll, Sf_Uc_BFu7ll)
//============================================================================


struct  Sf_Uc_BFu7s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Uc_BFu7s) C1{ FC2{} Fc Fs:7}



static void Test_Sf_Uc_BFu7s()
{
  {
    init_simple_test("Sf_Uc_BFu7s");
    static STRUCT_IF_C Sf_Uc_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Sf_Uc_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Sf_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu7s, Sf_Uc_BFu7s)
//============================================================================


struct  Sf_Uc_BFu8c  {
  struct empty v1;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Uc_BFu8c) C1{ FC2{} Fc Fc:8}



static void Test_Sf_Uc_BFu8c()
{
  {
    init_simple_test("Sf_Uc_BFu8c");
    static STRUCT_IF_C Sf_Uc_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_Uc_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu8c, Sf_Uc_BFu8c)
//============================================================================


struct  Sf_Uc_BFu8i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Uc_BFu8i) C1{ FC2{} Fc Fi:8}



static void Test_Sf_Uc_BFu8i()
{
  {
    init_simple_test("Sf_Uc_BFu8i");
    static STRUCT_IF_C Sf_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_Uc_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu8i, Sf_Uc_BFu8i)
//============================================================================


struct  Sf_Uc_BFu8ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Uc_BFu8ll) C1{ FC2{} Fc FL:8}



static void Test_Sf_Uc_BFu8ll()
{
  {
    init_simple_test("Sf_Uc_BFu8ll");
    static STRUCT_IF_C Sf_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu8ll, Sf_Uc_BFu8ll)
//============================================================================


struct  Sf_Uc_BFu8s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Uc_BFu8s) C1{ FC2{} Fc Fs:8}



static void Test_Sf_Uc_BFu8s()
{
  {
    init_simple_test("Sf_Uc_BFu8s");
    static STRUCT_IF_C Sf_Uc_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Sf_Uc_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Sf_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu8s, Sf_Uc_BFu8s)
//============================================================================


struct  Sf_Uc_BFu9i  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Uc_BFu9i) C1{ FC2{} Fc Fi:9}



static void Test_Sf_Uc_BFu9i()
{
  {
    init_simple_test("Sf_Uc_BFu9i");
    static STRUCT_IF_C Sf_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_Uc_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu9i, Sf_Uc_BFu9i)
//============================================================================


struct  Sf_Uc_BFu9ll  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Uc_BFu9ll) C1{ FC2{} Fc FL:9}



static void Test_Sf_Uc_BFu9ll()
{
  {
    init_simple_test("Sf_Uc_BFu9ll");
    static STRUCT_IF_C Sf_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Sf_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Sf_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu9ll, Sf_Uc_BFu9ll)
//============================================================================


struct  Sf_Uc_BFu9s  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Uc_BFu9s) C1{ FC2{} Fc Fs:9}



static void Test_Sf_Uc_BFu9s()
{
  {
    init_simple_test("Sf_Uc_BFu9s");
    static STRUCT_IF_C Sf_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Uc_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_BFu9s, Sf_Uc_BFu9s)
//============================================================================


struct  Sf_Uc_C  {
  struct empty v1;
  unsigned char v2;
  char v3;
};
//SIG(1 Sf_Uc_C) C1{ FC2{} Fc[2]}



static void Test_Sf_Uc_C()
{
  {
    init_simple_test("Sf_Uc_C");
    STRUCT_IF_C Sf_Uc_C lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_C)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_C)");
    check_field_offset(lv, v1, 0, "Sf_Uc_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_C.v2");
    check_field_offset(lv, v3, 1, "Sf_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_C, Sf_Uc_C)
//============================================================================


struct  Sf_Uc_D  {
  struct empty v1;
  unsigned char v2;
  double v3;
};
//SIG(1 Sf_Uc_D) C1{ FC2{} Fc FL}



static void Test_Sf_Uc_D()
{
  {
    init_simple_test("Sf_Uc_D");
    STRUCT_IF_C Sf_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_D)");
    check_field_offset(lv, v1, 0, "Sf_Uc_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_D, Sf_Uc_D)
//============================================================================


struct  Sf_Uc_F  {
  struct empty v1;
  unsigned char v2;
  float v3;
};
//SIG(1 Sf_Uc_F) C1{ FC2{} Fc Fi}



static void Test_Sf_Uc_F()
{
  {
    init_simple_test("Sf_Uc_F");
    STRUCT_IF_C Sf_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_F)");
    check_field_offset(lv, v1, 0, "Sf_Uc_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_F, Sf_Uc_F)
//============================================================================


struct  Sf_Uc_I  {
  struct empty v1;
  unsigned char v2;
  int v3;
};
//SIG(1 Sf_Uc_I) C1{ FC2{} Fc Fi}



static void Test_Sf_Uc_I()
{
  {
    init_simple_test("Sf_Uc_I");
    STRUCT_IF_C Sf_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_I)");
    check_field_offset(lv, v1, 0, "Sf_Uc_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_I, Sf_Uc_I)
//============================================================================


struct  Sf_Uc_Ip  {
  struct empty v1;
  unsigned char v2;
  int *v3;
};
//SIG(1 Sf_Uc_Ip) C1{ FC2{} Fc Fp}



static void Test_Sf_Uc_Ip()
{
  {
    init_simple_test("Sf_Uc_Ip");
    STRUCT_IF_C Sf_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Ip, Sf_Uc_Ip)
//============================================================================


struct  Sf_Uc_L  {
  struct empty v1;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 Sf_Uc_L) C1{ FC2{} Fc FL}



static void Test_Sf_Uc_L()
{
  {
    init_simple_test("Sf_Uc_L");
    STRUCT_IF_C Sf_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_L)");
    check_field_offset(lv, v1, 0, "Sf_Uc_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_L, Sf_Uc_L)
//============================================================================


struct  Sf_Uc_S  {
  struct empty v1;
  unsigned char v2;
  short v3;
};
//SIG(1 Sf_Uc_S) C1{ FC2{} Fc Fs}



static void Test_Sf_Uc_S()
{
  {
    init_simple_test("Sf_Uc_S");
    STRUCT_IF_C Sf_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_S)");
    check_field_offset(lv, v1, 0, "Sf_Uc_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_S.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_S, Sf_Uc_S)
//============================================================================


struct  Sf_Uc_Sf  {
  struct empty v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Sf_Uc_Sf) C1{ FC2{} Fc FC2}



static void Test_Sf_Uc_Sf()
{
  {
    init_simple_test("Sf_Uc_Sf");
    STRUCT_IF_C Sf_Uc_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Sf_Uc_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Sf.v2");
    check_field_offset(lv, v3, 1, "Sf_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Sf, Sf_Uc_Sf)
//============================================================================


struct  Sf_Uc_Uc  {
  struct empty v1;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 Sf_Uc_Uc) C1{ FC2{} Fc[2]}



static void Test_Sf_Uc_Uc()
{
  {
    init_simple_test("Sf_Uc_Uc");
    STRUCT_IF_C Sf_Uc_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Uc_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Sf_Uc_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Uc.v2");
    check_field_offset(lv, v3, 1, "Sf_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Uc, Sf_Uc_Uc)
//============================================================================


struct  Sf_Uc_Ui  {
  struct empty v1;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 Sf_Uc_Ui) C1{ FC2{} Fc Fi}



static void Test_Sf_Uc_Ui()
{
  {
    init_simple_test("Sf_Uc_Ui");
    STRUCT_IF_C Sf_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Uc_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Ui, Sf_Uc_Ui)
//============================================================================


struct  Sf_Uc_Ul  {
  struct empty v1;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 Sf_Uc_Ul) C1{ FC2{} Fc FL}



static void Test_Sf_Uc_Ul()
{
  {
    init_simple_test("Sf_Uc_Ul");
    STRUCT_IF_C Sf_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Ul, Sf_Uc_Ul)
//============================================================================


struct  Sf_Uc_Us  {
  struct empty v1;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 Sf_Uc_Us) C1{ FC2{} Fc Fs}



static void Test_Sf_Uc_Us()
{
  {
    init_simple_test("Sf_Uc_Us");
    STRUCT_IF_C Sf_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Uc_Us)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Us, Sf_Uc_Us)
//============================================================================


struct  Sf_Uc_Vp  {
  struct empty v1;
  unsigned char v2;
  void *v3;
};
//SIG(1 Sf_Uc_Vp) C1{ FC2{} Fc Fp}



static void Test_Sf_Uc_Vp()
{
  {
    init_simple_test("Sf_Uc_Vp");
    STRUCT_IF_C Sf_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Uc_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Uc_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Uc_Vp, Sf_Uc_Vp)
//============================================================================


struct  Sf_Ui  {
  struct empty v1;
  unsigned int v2;
};
//SIG(1 Sf_Ui) C1{ FC2{} Fi}



static void Test_Sf_Ui()
{
  {
    init_simple_test("Sf_Ui");
    STRUCT_IF_C Sf_Ui lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui, Sf_Ui)
//============================================================================


struct  Sf_Ui_BFu15i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Ui_BFu15i) C1{ FC2{} Fi Fi:15}



static void Test_Sf_Ui_BFu15i()
{
  {
    init_simple_test("Sf_Ui_BFu15i");
    static STRUCT_IF_C Sf_Ui_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Ui_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu15i, Sf_Ui_BFu15i)
//============================================================================


struct  Sf_Ui_BFu15ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Ui_BFu15ll) C1{ FC2{} Fi FL:15}



static void Test_Sf_Ui_BFu15ll()
{
  {
    init_simple_test("Sf_Ui_BFu15ll");
    static STRUCT_IF_C Sf_Ui_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu15ll, Sf_Ui_BFu15ll)
//============================================================================


struct  Sf_Ui_BFu15s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Ui_BFu15s) C1{ FC2{} Fi Fs:15}



static void Test_Sf_Ui_BFu15s()
{
  {
    init_simple_test("Sf_Ui_BFu15s");
    static STRUCT_IF_C Sf_Ui_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Sf_Ui_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Sf_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu15s, Sf_Ui_BFu15s)
//============================================================================


struct  Sf_Ui_BFu16i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Ui_BFu16i) C1{ FC2{} Fi Fi:16}



static void Test_Sf_Ui_BFu16i()
{
  {
    init_simple_test("Sf_Ui_BFu16i");
    static STRUCT_IF_C Sf_Ui_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Ui_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu16i, Sf_Ui_BFu16i)
//============================================================================


struct  Sf_Ui_BFu16ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Ui_BFu16ll) C1{ FC2{} Fi FL:16}



static void Test_Sf_Ui_BFu16ll()
{
  {
    init_simple_test("Sf_Ui_BFu16ll");
    static STRUCT_IF_C Sf_Ui_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu16ll, Sf_Ui_BFu16ll)
//============================================================================


struct  Sf_Ui_BFu16s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Ui_BFu16s) C1{ FC2{} Fi Fs:16}



static void Test_Sf_Ui_BFu16s()
{
  {
    init_simple_test("Sf_Ui_BFu16s");
    static STRUCT_IF_C Sf_Ui_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Sf_Ui_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Sf_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu16s, Sf_Ui_BFu16s)
//============================================================================


struct  Sf_Ui_BFu17i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Ui_BFu17i) C1{ FC2{} Fi Fi:17}



static void Test_Sf_Ui_BFu17i()
{
  {
    init_simple_test("Sf_Ui_BFu17i");
    static STRUCT_IF_C Sf_Ui_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Ui_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu17i, Sf_Ui_BFu17i)
//============================================================================


struct  Sf_Ui_BFu17ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Ui_BFu17ll) C1{ FC2{} Fi FL:17}



static void Test_Sf_Ui_BFu17ll()
{
  {
    init_simple_test("Sf_Ui_BFu17ll");
    static STRUCT_IF_C Sf_Ui_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu17ll, Sf_Ui_BFu17ll)
//============================================================================


struct  Sf_Ui_BFu1c  {
  struct empty v1;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Ui_BFu1c) C1{ FC2{} Fi Fc:1}



static void Test_Sf_Ui_BFu1c()
{
  {
    init_simple_test("Sf_Ui_BFu1c");
    static STRUCT_IF_C Sf_Ui_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu1c, Sf_Ui_BFu1c)
//============================================================================


struct  Sf_Ui_BFu1i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Ui_BFu1i) C1{ FC2{} Fi Fi:1}



static void Test_Sf_Ui_BFu1i()
{
  {
    init_simple_test("Sf_Ui_BFu1i");
    static STRUCT_IF_C Sf_Ui_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu1i, Sf_Ui_BFu1i)
//============================================================================


struct  Sf_Ui_BFu1ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Ui_BFu1ll) C1{ FC2{} Fi FL:1}



static void Test_Sf_Ui_BFu1ll()
{
  {
    init_simple_test("Sf_Ui_BFu1ll");
    static STRUCT_IF_C Sf_Ui_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu1ll, Sf_Ui_BFu1ll)
//============================================================================


struct  Sf_Ui_BFu1s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Ui_BFu1s) C1{ FC2{} Fi Fs:1}



static void Test_Sf_Ui_BFu1s()
{
  {
    init_simple_test("Sf_Ui_BFu1s");
    static STRUCT_IF_C Sf_Ui_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Sf_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu1s, Sf_Ui_BFu1s)
//============================================================================


struct  Sf_Ui_BFu31i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Ui_BFu31i) C1{ FC2{} Fi Fi:31}



static void Test_Sf_Ui_BFu31i()
{
  {
    init_simple_test("Sf_Ui_BFu31i");
    static STRUCT_IF_C Sf_Ui_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Ui_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu31i, Sf_Ui_BFu31i)
//============================================================================


struct  Sf_Ui_BFu31ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Ui_BFu31ll) C1{ FC2{} Fi FL:31}



static void Test_Sf_Ui_BFu31ll()
{
  {
    init_simple_test("Sf_Ui_BFu31ll");
    static STRUCT_IF_C Sf_Ui_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu31ll, Sf_Ui_BFu31ll)
//============================================================================


struct  Sf_Ui_BFu32i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Ui_BFu32i) C1{ FC2{} Fi Fi:32}



static void Test_Sf_Ui_BFu32i()
{
  {
    init_simple_test("Sf_Ui_BFu32i");
    static STRUCT_IF_C Sf_Ui_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Ui_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu32i, Sf_Ui_BFu32i)
//============================================================================


struct  Sf_Ui_BFu32ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Ui_BFu32ll) C1{ FC2{} Fi FL:32}



static void Test_Sf_Ui_BFu32ll()
{
  {
    init_simple_test("Sf_Ui_BFu32ll");
    static STRUCT_IF_C Sf_Ui_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu32ll, Sf_Ui_BFu32ll)
//============================================================================


struct  Sf_Ui_BFu33  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Ui_BFu33) C1{ FC2{} Fi FL:33}



static void Test_Sf_Ui_BFu33()
{
  {
    init_simple_test("Sf_Ui_BFu33");
    static STRUCT_IF_C Sf_Ui_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_Ui_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu33, Sf_Ui_BFu33)
//============================================================================


struct  Sf_Ui_BFu7c  {
  struct empty v1;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Ui_BFu7c) C1{ FC2{} Fi Fc:7}



static void Test_Sf_Ui_BFu7c()
{
  {
    init_simple_test("Sf_Ui_BFu7c");
    static STRUCT_IF_C Sf_Ui_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Ui_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu7c, Sf_Ui_BFu7c)
//============================================================================


struct  Sf_Ui_BFu7i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Ui_BFu7i) C1{ FC2{} Fi Fi:7}



static void Test_Sf_Ui_BFu7i()
{
  {
    init_simple_test("Sf_Ui_BFu7i");
    static STRUCT_IF_C Sf_Ui_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Ui_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu7i, Sf_Ui_BFu7i)
//============================================================================


struct  Sf_Ui_BFu7ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Ui_BFu7ll) C1{ FC2{} Fi FL:7}



static void Test_Sf_Ui_BFu7ll()
{
  {
    init_simple_test("Sf_Ui_BFu7ll");
    static STRUCT_IF_C Sf_Ui_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu7ll, Sf_Ui_BFu7ll)
//============================================================================


struct  Sf_Ui_BFu7s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Ui_BFu7s) C1{ FC2{} Fi Fs:7}



static void Test_Sf_Ui_BFu7s()
{
  {
    init_simple_test("Sf_Ui_BFu7s");
    static STRUCT_IF_C Sf_Ui_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Sf_Ui_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Sf_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu7s, Sf_Ui_BFu7s)
//============================================================================


struct  Sf_Ui_BFu8c  {
  struct empty v1;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Ui_BFu8c) C1{ FC2{} Fi Fc:8}



static void Test_Sf_Ui_BFu8c()
{
  {
    init_simple_test("Sf_Ui_BFu8c");
    static STRUCT_IF_C Sf_Ui_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Ui_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu8c, Sf_Ui_BFu8c)
//============================================================================


struct  Sf_Ui_BFu8i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Ui_BFu8i) C1{ FC2{} Fi Fi:8}



static void Test_Sf_Ui_BFu8i()
{
  {
    init_simple_test("Sf_Ui_BFu8i");
    static STRUCT_IF_C Sf_Ui_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Ui_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu8i, Sf_Ui_BFu8i)
//============================================================================


struct  Sf_Ui_BFu8ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Ui_BFu8ll) C1{ FC2{} Fi FL:8}



static void Test_Sf_Ui_BFu8ll()
{
  {
    init_simple_test("Sf_Ui_BFu8ll");
    static STRUCT_IF_C Sf_Ui_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu8ll, Sf_Ui_BFu8ll)
//============================================================================


struct  Sf_Ui_BFu8s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Ui_BFu8s) C1{ FC2{} Fi Fs:8}



static void Test_Sf_Ui_BFu8s()
{
  {
    init_simple_test("Sf_Ui_BFu8s");
    static STRUCT_IF_C Sf_Ui_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Sf_Ui_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Sf_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu8s, Sf_Ui_BFu8s)
//============================================================================


struct  Sf_Ui_BFu9i  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Ui_BFu9i) C1{ FC2{} Fi Fi:9}



static void Test_Sf_Ui_BFu9i()
{
  {
    init_simple_test("Sf_Ui_BFu9i");
    static STRUCT_IF_C Sf_Ui_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Ui_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu9i, Sf_Ui_BFu9i)
//============================================================================


struct  Sf_Ui_BFu9ll  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Ui_BFu9ll) C1{ FC2{} Fi FL:9}



static void Test_Sf_Ui_BFu9ll()
{
  {
    init_simple_test("Sf_Ui_BFu9ll");
    static STRUCT_IF_C Sf_Ui_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu9ll, Sf_Ui_BFu9ll)
//============================================================================


struct  Sf_Ui_BFu9s  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Ui_BFu9s) C1{ FC2{} Fi Fs:9}



static void Test_Sf_Ui_BFu9s()
{
  {
    init_simple_test("Sf_Ui_BFu9s");
    static STRUCT_IF_C Sf_Ui_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Ui_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Sf_Ui_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Sf_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_BFu9s, Sf_Ui_BFu9s)
//============================================================================


struct  Sf_Ui_C  {
  struct empty v1;
  unsigned int v2;
  char v3;
};
//SIG(1 Sf_Ui_C) C1{ FC2{} Fi Fc}



static void Test_Sf_Ui_C()
{
  {
    init_simple_test("Sf_Ui_C");
    STRUCT_IF_C Sf_Ui_C lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_C)");
    check_field_offset(lv, v1, 0, "Sf_Ui_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_C.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_C, Sf_Ui_C)
//============================================================================


struct  Sf_Ui_D  {
  struct empty v1;
  unsigned int v2;
  double v3;
};
//SIG(1 Sf_Ui_D) C1{ FC2{} Fi FL}



static void Test_Sf_Ui_D()
{
  {
    init_simple_test("Sf_Ui_D");
    STRUCT_IF_C Sf_Ui_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_D)");
    check_field_offset(lv, v1, 0, "Sf_Ui_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_D, Sf_Ui_D)
//============================================================================


struct  Sf_Ui_F  {
  struct empty v1;
  unsigned int v2;
  float v3;
};
//SIG(1 Sf_Ui_F) C1{ FC2{} Fi[2]}



static void Test_Sf_Ui_F()
{
  {
    init_simple_test("Sf_Ui_F");
    STRUCT_IF_C Sf_Ui_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_F)");
    check_field_offset(lv, v1, 0, "Sf_Ui_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_F, Sf_Ui_F)
//============================================================================


struct  Sf_Ui_I  {
  struct empty v1;
  unsigned int v2;
  int v3;
};
//SIG(1 Sf_Ui_I) C1{ FC2{} Fi[2]}



static void Test_Sf_Ui_I()
{
  {
    init_simple_test("Sf_Ui_I");
    STRUCT_IF_C Sf_Ui_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_I)");
    check_field_offset(lv, v1, 0, "Sf_Ui_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_I, Sf_Ui_I)
//============================================================================


struct  Sf_Ui_Ip  {
  struct empty v1;
  unsigned int v2;
  int *v3;
};
//SIG(1 Sf_Ui_Ip) C1{ FC2{} Fi Fp}



static void Test_Sf_Ui_Ip()
{
  {
    init_simple_test("Sf_Ui_Ip");
    STRUCT_IF_C Sf_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Ip, Sf_Ui_Ip)
//============================================================================


struct  Sf_Ui_L  {
  struct empty v1;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 Sf_Ui_L) C1{ FC2{} Fi FL}



static void Test_Sf_Ui_L()
{
  {
    init_simple_test("Sf_Ui_L");
    STRUCT_IF_C Sf_Ui_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_L)");
    check_field_offset(lv, v1, 0, "Sf_Ui_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_L, Sf_Ui_L)
//============================================================================


struct  Sf_Ui_S  {
  struct empty v1;
  unsigned int v2;
  short v3;
};
//SIG(1 Sf_Ui_S) C1{ FC2{} Fi Fs}



static void Test_Sf_Ui_S()
{
  {
    init_simple_test("Sf_Ui_S");
    STRUCT_IF_C Sf_Ui_S lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_S)");
    check_field_offset(lv, v1, 0, "Sf_Ui_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_S.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_S, Sf_Ui_S)
//============================================================================


struct  Sf_Ui_Sf  {
  struct empty v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Sf_Ui_Sf) C1{ FC2{} Fi FC2}



static void Test_Sf_Ui_Sf()
{
  {
    init_simple_test("Sf_Ui_Sf");
    STRUCT_IF_C Sf_Ui_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Ui_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Sf.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Sf, Sf_Ui_Sf)
//============================================================================


struct  Sf_Ui_Uc  {
  struct empty v1;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 Sf_Ui_Uc) C1{ FC2{} Fi Fc}



static void Test_Sf_Ui_Uc()
{
  {
    init_simple_test("Sf_Ui_Uc");
    STRUCT_IF_C Sf_Ui_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Uc.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Uc, Sf_Ui_Uc)
//============================================================================


struct  Sf_Ui_Ui  {
  struct empty v1;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 Sf_Ui_Ui) C1{ FC2{} Fi[2]}



static void Test_Sf_Ui_Ui()
{
  {
    init_simple_test("Sf_Ui_Ui");
    STRUCT_IF_C Sf_Ui_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Ui, Sf_Ui_Ui)
//============================================================================


struct  Sf_Ui_Ul  {
  struct empty v1;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 Sf_Ui_Ul) C1{ FC2{} Fi FL}



static void Test_Sf_Ui_Ul()
{
  {
    init_simple_test("Sf_Ui_Ul");
    STRUCT_IF_C Sf_Ui_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Ul, Sf_Ui_Ul)
//============================================================================


struct  Sf_Ui_Us  {
  struct empty v1;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 Sf_Ui_Us) C1{ FC2{} Fi Fs}



static void Test_Sf_Ui_Us()
{
  {
    init_simple_test("Sf_Ui_Us");
    STRUCT_IF_C Sf_Ui_Us lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Ui_Us)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Us.v2");
    check_field_offset(lv, v3, 4, "Sf_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Us, Sf_Ui_Us)
//============================================================================


struct  Sf_Ui_Vp  {
  struct empty v1;
  unsigned int v2;
  void *v3;
};
//SIG(1 Sf_Ui_Vp) C1{ FC2{} Fi Fp}



static void Test_Sf_Ui_Vp()
{
  {
    init_simple_test("Sf_Ui_Vp");
    STRUCT_IF_C Sf_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ui_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Ui_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Ui_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ui_Vp, Sf_Ui_Vp)
//============================================================================


struct  Sf_Ul  {
  struct empty v1;
  __tsu64 v2;
};
//SIG(1 Sf_Ul) C1{ FC2{} FL}



static void Test_Sf_Ul()
{
  {
    init_simple_test("Sf_Ul");
    STRUCT_IF_C Sf_Ul lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul, Sf_Ul)
//============================================================================


struct  Sf_Ul_BFu15i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Ul_BFu15i) C1{ FC2{} FL Fi:15}



static void Test_Sf_Ul_BFu15i()
{
  {
    init_simple_test("Sf_Ul_BFu15i");
    static STRUCT_IF_C Sf_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ul_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu15i, Sf_Ul_BFu15i)
//============================================================================


struct  Sf_Ul_BFu15ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Ul_BFu15ll) C1{ FC2{} FL FL:15}



static void Test_Sf_Ul_BFu15ll()
{
  {
    init_simple_test("Sf_Ul_BFu15ll");
    static STRUCT_IF_C Sf_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ul_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu15ll, Sf_Ul_BFu15ll)
//============================================================================


struct  Sf_Ul_BFu15s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Ul_BFu15s) C1{ FC2{} FL Fs:15}



static void Test_Sf_Ul_BFu15s()
{
  {
    init_simple_test("Sf_Ul_BFu15s");
    static STRUCT_IF_C Sf_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Sf_Ul_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Sf_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu15s, Sf_Ul_BFu15s)
//============================================================================


struct  Sf_Ul_BFu16i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Ul_BFu16i) C1{ FC2{} FL Fi:16}



static void Test_Sf_Ul_BFu16i()
{
  {
    init_simple_test("Sf_Ul_BFu16i");
    static STRUCT_IF_C Sf_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ul_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu16i, Sf_Ul_BFu16i)
//============================================================================


struct  Sf_Ul_BFu16ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Ul_BFu16ll) C1{ FC2{} FL FL:16}



static void Test_Sf_Ul_BFu16ll()
{
  {
    init_simple_test("Sf_Ul_BFu16ll");
    static STRUCT_IF_C Sf_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ul_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu16ll, Sf_Ul_BFu16ll)
//============================================================================


struct  Sf_Ul_BFu16s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Ul_BFu16s) C1{ FC2{} FL Fs:16}



static void Test_Sf_Ul_BFu16s()
{
  {
    init_simple_test("Sf_Ul_BFu16s");
    static STRUCT_IF_C Sf_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Sf_Ul_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Sf_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu16s, Sf_Ul_BFu16s)
//============================================================================


struct  Sf_Ul_BFu17i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Ul_BFu17i) C1{ FC2{} FL Fi:17}



static void Test_Sf_Ul_BFu17i()
{
  {
    init_simple_test("Sf_Ul_BFu17i");
    static STRUCT_IF_C Sf_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_Ul_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu17i, Sf_Ul_BFu17i)
//============================================================================


struct  Sf_Ul_BFu17ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Ul_BFu17ll) C1{ FC2{} FL FL:17}



static void Test_Sf_Ul_BFu17ll()
{
  {
    init_simple_test("Sf_Ul_BFu17ll");
    static STRUCT_IF_C Sf_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Sf_Ul_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Sf_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu17ll, Sf_Ul_BFu17ll)
//============================================================================


struct  Sf_Ul_BFu1c  {
  struct empty v1;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Ul_BFu1c) C1{ FC2{} FL Fc:1}



static void Test_Sf_Ul_BFu1c()
{
  {
    init_simple_test("Sf_Ul_BFu1c");
    static STRUCT_IF_C Sf_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu1c, Sf_Ul_BFu1c)
//============================================================================


struct  Sf_Ul_BFu1i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Ul_BFu1i) C1{ FC2{} FL Fi:1}



static void Test_Sf_Ul_BFu1i()
{
  {
    init_simple_test("Sf_Ul_BFu1i");
    static STRUCT_IF_C Sf_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu1i, Sf_Ul_BFu1i)
//============================================================================


struct  Sf_Ul_BFu1ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Ul_BFu1ll) C1{ FC2{} FL FL:1}



static void Test_Sf_Ul_BFu1ll()
{
  {
    init_simple_test("Sf_Ul_BFu1ll");
    static STRUCT_IF_C Sf_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu1ll, Sf_Ul_BFu1ll)
//============================================================================


struct  Sf_Ul_BFu1s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Ul_BFu1s) C1{ FC2{} FL Fs:1}



static void Test_Sf_Ul_BFu1s()
{
  {
    init_simple_test("Sf_Ul_BFu1s");
    static STRUCT_IF_C Sf_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Sf_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu1s, Sf_Ul_BFu1s)
//============================================================================


struct  Sf_Ul_BFu31i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Ul_BFu31i) C1{ FC2{} FL Fi:31}



static void Test_Sf_Ul_BFu31i()
{
  {
    init_simple_test("Sf_Ul_BFu31i");
    static STRUCT_IF_C Sf_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_Ul_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu31i, Sf_Ul_BFu31i)
//============================================================================


struct  Sf_Ul_BFu31ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Ul_BFu31ll) C1{ FC2{} FL FL:31}



static void Test_Sf_Ul_BFu31ll()
{
  {
    init_simple_test("Sf_Ul_BFu31ll");
    static STRUCT_IF_C Sf_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Sf_Ul_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Sf_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu31ll, Sf_Ul_BFu31ll)
//============================================================================


struct  Sf_Ul_BFu32i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Ul_BFu32i) C1{ FC2{} FL Fi:32}



static void Test_Sf_Ul_BFu32i()
{
  {
    init_simple_test("Sf_Ul_BFu32i");
    static STRUCT_IF_C Sf_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_Ul_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu32i, Sf_Ul_BFu32i)
//============================================================================


struct  Sf_Ul_BFu32ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Ul_BFu32ll) C1{ FC2{} FL FL:32}



static void Test_Sf_Ul_BFu32ll()
{
  {
    init_simple_test("Sf_Ul_BFu32ll");
    static STRUCT_IF_C Sf_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Sf_Ul_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Sf_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu32ll, Sf_Ul_BFu32ll)
//============================================================================


struct  Sf_Ul_BFu33  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Ul_BFu33) C1{ FC2{} FL FL:33}



static void Test_Sf_Ul_BFu33()
{
  {
    init_simple_test("Sf_Ul_BFu33");
    static STRUCT_IF_C Sf_Ul_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Sf_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Sf_Ul_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Sf_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu33, Sf_Ul_BFu33)
//============================================================================


struct  Sf_Ul_BFu7c  {
  struct empty v1;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Ul_BFu7c) C1{ FC2{} FL Fc:7}



static void Test_Sf_Ul_BFu7c()
{
  {
    init_simple_test("Sf_Ul_BFu7c");
    static STRUCT_IF_C Sf_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ul_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu7c, Sf_Ul_BFu7c)
//============================================================================


struct  Sf_Ul_BFu7i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Ul_BFu7i) C1{ FC2{} FL Fi:7}



static void Test_Sf_Ul_BFu7i()
{
  {
    init_simple_test("Sf_Ul_BFu7i");
    static STRUCT_IF_C Sf_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ul_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu7i, Sf_Ul_BFu7i)
//============================================================================


struct  Sf_Ul_BFu7ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Ul_BFu7ll) C1{ FC2{} FL FL:7}



static void Test_Sf_Ul_BFu7ll()
{
  {
    init_simple_test("Sf_Ul_BFu7ll");
    static STRUCT_IF_C Sf_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ul_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu7ll, Sf_Ul_BFu7ll)
//============================================================================


struct  Sf_Ul_BFu7s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Ul_BFu7s) C1{ FC2{} FL Fs:7}



static void Test_Sf_Ul_BFu7s()
{
  {
    init_simple_test("Sf_Ul_BFu7s");
    static STRUCT_IF_C Sf_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Sf_Ul_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Sf_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu7s, Sf_Ul_BFu7s)
//============================================================================


struct  Sf_Ul_BFu8c  {
  struct empty v1;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Ul_BFu8c) C1{ FC2{} FL Fc:8}



static void Test_Sf_Ul_BFu8c()
{
  {
    init_simple_test("Sf_Ul_BFu8c");
    static STRUCT_IF_C Sf_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ul_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu8c, Sf_Ul_BFu8c)
//============================================================================


struct  Sf_Ul_BFu8i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Ul_BFu8i) C1{ FC2{} FL Fi:8}



static void Test_Sf_Ul_BFu8i()
{
  {
    init_simple_test("Sf_Ul_BFu8i");
    static STRUCT_IF_C Sf_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ul_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu8i, Sf_Ul_BFu8i)
//============================================================================


struct  Sf_Ul_BFu8ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Ul_BFu8ll) C1{ FC2{} FL FL:8}



static void Test_Sf_Ul_BFu8ll()
{
  {
    init_simple_test("Sf_Ul_BFu8ll");
    static STRUCT_IF_C Sf_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ul_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu8ll, Sf_Ul_BFu8ll)
//============================================================================


struct  Sf_Ul_BFu8s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Ul_BFu8s) C1{ FC2{} FL Fs:8}



static void Test_Sf_Ul_BFu8s()
{
  {
    init_simple_test("Sf_Ul_BFu8s");
    static STRUCT_IF_C Sf_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Sf_Ul_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Sf_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu8s, Sf_Ul_BFu8s)
//============================================================================


struct  Sf_Ul_BFu9i  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Ul_BFu9i) C1{ FC2{} FL Fi:9}



static void Test_Sf_Ul_BFu9i()
{
  {
    init_simple_test("Sf_Ul_BFu9i");
    static STRUCT_IF_C Sf_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ul_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu9i, Sf_Ul_BFu9i)
//============================================================================


struct  Sf_Ul_BFu9ll  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Ul_BFu9ll) C1{ FC2{} FL FL:9}



static void Test_Sf_Ul_BFu9ll()
{
  {
    init_simple_test("Sf_Ul_BFu9ll");
    static STRUCT_IF_C Sf_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ul_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu9ll, Sf_Ul_BFu9ll)
//============================================================================


struct  Sf_Ul_BFu9s  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Ul_BFu9s) C1{ FC2{} FL Fs:9}



static void Test_Sf_Ul_BFu9s()
{
  {
    init_simple_test("Sf_Ul_BFu9s");
    static STRUCT_IF_C Sf_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Ul_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Sf_Ul_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Sf_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_BFu9s, Sf_Ul_BFu9s)
//============================================================================


struct  Sf_Ul_C  {
  struct empty v1;
  __tsu64 v2;
  char v3;
};
//SIG(1 Sf_Ul_C) C1{ FC2{} FL Fc}



static void Test_Sf_Ul_C()
{
  {
    init_simple_test("Sf_Ul_C");
    STRUCT_IF_C Sf_Ul_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_C)");
    check_field_offset(lv, v1, 0, "Sf_Ul_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_C.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_C, Sf_Ul_C)
//============================================================================


struct  Sf_Ul_D  {
  struct empty v1;
  __tsu64 v2;
  double v3;
};
//SIG(1 Sf_Ul_D) C1{ FC2{} FL[2]}



static void Test_Sf_Ul_D()
{
  {
    init_simple_test("Sf_Ul_D");
    STRUCT_IF_C Sf_Ul_D lv;
    check2(sizeof(lv), 16, "sizeof(Sf_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_D)");
    check_field_offset(lv, v1, 0, "Sf_Ul_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_D.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_D, Sf_Ul_D)
//============================================================================


struct  Sf_Ul_F  {
  struct empty v1;
  __tsu64 v2;
  float v3;
};
//SIG(1 Sf_Ul_F) C1{ FC2{} FL Fi}



static void Test_Sf_Ul_F()
{
  {
    init_simple_test("Sf_Ul_F");
    STRUCT_IF_C Sf_Ul_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_F)");
    check_field_offset(lv, v1, 0, "Sf_Ul_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_F.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_F, Sf_Ul_F)
//============================================================================


struct  Sf_Ul_I  {
  struct empty v1;
  __tsu64 v2;
  int v3;
};
//SIG(1 Sf_Ul_I) C1{ FC2{} FL Fi}



static void Test_Sf_Ul_I()
{
  {
    init_simple_test("Sf_Ul_I");
    STRUCT_IF_C Sf_Ul_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_I)");
    check_field_offset(lv, v1, 0, "Sf_Ul_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_I.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_I, Sf_Ul_I)
//============================================================================


struct  Sf_Ul_Ip  {
  struct empty v1;
  __tsu64 v2;
  int *v3;
};
//SIG(1 Sf_Ul_Ip) C1{ FC2{} FL Fp}



static void Test_Sf_Ul_Ip()
{
  {
    init_simple_test("Sf_Ul_Ip");
    STRUCT_IF_C Sf_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Ip.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Ip, Sf_Ul_Ip)
//============================================================================


struct  Sf_Ul_L  {
  struct empty v1;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 Sf_Ul_L) C1{ FC2{} FL[2]}



static void Test_Sf_Ul_L()
{
  {
    init_simple_test("Sf_Ul_L");
    STRUCT_IF_C Sf_Ul_L lv;
    check2(sizeof(lv), 16, "sizeof(Sf_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_L)");
    check_field_offset(lv, v1, 0, "Sf_Ul_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_L.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_L, Sf_Ul_L)
//============================================================================


struct  Sf_Ul_S  {
  struct empty v1;
  __tsu64 v2;
  short v3;
};
//SIG(1 Sf_Ul_S) C1{ FC2{} FL Fs}



static void Test_Sf_Ul_S()
{
  {
    init_simple_test("Sf_Ul_S");
    STRUCT_IF_C Sf_Ul_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_S)");
    check_field_offset(lv, v1, 0, "Sf_Ul_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_S.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_S, Sf_Ul_S)
//============================================================================


struct  Sf_Ul_Sf  {
  struct empty v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Sf_Ul_Sf) C1{ FC2{} FL FC2}



static void Test_Sf_Ul_Sf()
{
  {
    init_simple_test("Sf_Ul_Sf");
    STRUCT_IF_C Sf_Ul_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Sf.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Sf, Sf_Ul_Sf)
//============================================================================


struct  Sf_Ul_Uc  {
  struct empty v1;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 Sf_Ul_Uc) C1{ FC2{} FL Fc}



static void Test_Sf_Ul_Uc()
{
  {
    init_simple_test("Sf_Ul_Uc");
    STRUCT_IF_C Sf_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Uc.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Uc, Sf_Ul_Uc)
//============================================================================


struct  Sf_Ul_Ui  {
  struct empty v1;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 Sf_Ul_Ui) C1{ FC2{} FL Fi}



static void Test_Sf_Ul_Ui()
{
  {
    init_simple_test("Sf_Ul_Ui");
    STRUCT_IF_C Sf_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Ui.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Ui, Sf_Ul_Ui)
//============================================================================


struct  Sf_Ul_Ul  {
  struct empty v1;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 Sf_Ul_Ul) C1{ FC2{} FL[2]}



static void Test_Sf_Ul_Ul()
{
  {
    init_simple_test("Sf_Ul_Ul");
    STRUCT_IF_C Sf_Ul_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Sf_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Ul.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Ul, Sf_Ul_Ul)
//============================================================================


struct  Sf_Ul_Us  {
  struct empty v1;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 Sf_Ul_Us) C1{ FC2{} FL Fs}



static void Test_Sf_Ul_Us()
{
  {
    init_simple_test("Sf_Ul_Us");
    STRUCT_IF_C Sf_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Us)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Us.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Us, Sf_Ul_Us)
//============================================================================


struct  Sf_Ul_Vp  {
  struct empty v1;
  __tsu64 v2;
  void *v3;
};
//SIG(1 Sf_Ul_Vp) C1{ FC2{} FL Fp}



static void Test_Sf_Ul_Vp()
{
  {
    init_simple_test("Sf_Ul_Vp");
    STRUCT_IF_C Sf_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Ul_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Ul_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Ul_Vp.v2");
    check_field_offset(lv, v3, 8, "Sf_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Ul_Vp, Sf_Ul_Vp)
//============================================================================


struct  Sf_Us  {
  struct empty v1;
  unsigned short v2;
};
//SIG(1 Sf_Us) C1{ FC2{} Fs}



static void Test_Sf_Us()
{
  {
    init_simple_test("Sf_Us");
    STRUCT_IF_C Sf_Us lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us)");
    check_field_offset(lv, v1, 0, "Sf_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us, Sf_Us)
//============================================================================


struct  Sf_Us_BFu15i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Us_BFu15i) C1{ FC2{} Fs Fi:15}



static void Test_Sf_Us_BFu15i()
{
  {
    init_simple_test("Sf_Us_BFu15i");
    static STRUCT_IF_C Sf_Us_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Us_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu15i, Sf_Us_BFu15i)
//============================================================================


struct  Sf_Us_BFu15ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Us_BFu15ll) C1{ FC2{} Fs FL:15}



static void Test_Sf_Us_BFu15ll()
{
  {
    init_simple_test("Sf_Us_BFu15ll");
    static STRUCT_IF_C Sf_Us_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Us_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu15ll, Sf_Us_BFu15ll)
//============================================================================


struct  Sf_Us_BFu15s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Us_BFu15s) C1{ FC2{} Fs Fs:15}



static void Test_Sf_Us_BFu15s()
{
  {
    init_simple_test("Sf_Us_BFu15s");
    static STRUCT_IF_C Sf_Us_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Sf_Us_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Sf_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu15s, Sf_Us_BFu15s)
//============================================================================


struct  Sf_Us_BFu16i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Us_BFu16i) C1{ FC2{} Fs Fi:16}



static void Test_Sf_Us_BFu16i()
{
  {
    init_simple_test("Sf_Us_BFu16i");
    static STRUCT_IF_C Sf_Us_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Us_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu16i, Sf_Us_BFu16i)
//============================================================================


struct  Sf_Us_BFu16ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Us_BFu16ll) C1{ FC2{} Fs FL:16}



static void Test_Sf_Us_BFu16ll()
{
  {
    init_simple_test("Sf_Us_BFu16ll");
    static STRUCT_IF_C Sf_Us_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Us_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu16ll, Sf_Us_BFu16ll)
//============================================================================


struct  Sf_Us_BFu16s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Us_BFu16s) C1{ FC2{} Fs Fs:16}



static void Test_Sf_Us_BFu16s()
{
  {
    init_simple_test("Sf_Us_BFu16s");
    static STRUCT_IF_C Sf_Us_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Sf_Us_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Sf_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu16s, Sf_Us_BFu16s)
//============================================================================


struct  Sf_Us_BFu17i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Us_BFu17i) C1{ FC2{} Fs Fi:17}



static void Test_Sf_Us_BFu17i()
{
  {
    init_simple_test("Sf_Us_BFu17i");
    static STRUCT_IF_C Sf_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Sf_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Sf_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu17i, Sf_Us_BFu17i)
//============================================================================


struct  Sf_Us_BFu17ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Us_BFu17ll) C1{ FC2{} Fs FL:17}



static void Test_Sf_Us_BFu17ll()
{
  {
    init_simple_test("Sf_Us_BFu17ll");
    static STRUCT_IF_C Sf_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Sf_Us_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Sf_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu17ll, Sf_Us_BFu17ll)
//============================================================================


struct  Sf_Us_BFu1c  {
  struct empty v1;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Us_BFu1c) C1{ FC2{} Fs Fc:1}



static void Test_Sf_Us_BFu1c()
{
  {
    init_simple_test("Sf_Us_BFu1c");
    static STRUCT_IF_C Sf_Us_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu1c, Sf_Us_BFu1c)
//============================================================================


struct  Sf_Us_BFu1i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Us_BFu1i) C1{ FC2{} Fs Fi:1}



static void Test_Sf_Us_BFu1i()
{
  {
    init_simple_test("Sf_Us_BFu1i");
    static STRUCT_IF_C Sf_Us_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu1i, Sf_Us_BFu1i)
//============================================================================


struct  Sf_Us_BFu1ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Us_BFu1ll) C1{ FC2{} Fs FL:1}



static void Test_Sf_Us_BFu1ll()
{
  {
    init_simple_test("Sf_Us_BFu1ll");
    static STRUCT_IF_C Sf_Us_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu1ll, Sf_Us_BFu1ll)
//============================================================================


struct  Sf_Us_BFu1s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Us_BFu1s) C1{ FC2{} Fs Fs:1}



static void Test_Sf_Us_BFu1s()
{
  {
    init_simple_test("Sf_Us_BFu1s");
    static STRUCT_IF_C Sf_Us_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Sf_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu1s, Sf_Us_BFu1s)
//============================================================================


struct  Sf_Us_BFu31i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Us_BFu31i) C1{ FC2{} Fs Fi:31}



static void Test_Sf_Us_BFu31i()
{
  {
    init_simple_test("Sf_Us_BFu31i");
    static STRUCT_IF_C Sf_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Sf_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Sf_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu31i, Sf_Us_BFu31i)
//============================================================================


struct  Sf_Us_BFu31ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Us_BFu31ll) C1{ FC2{} Fs FL:31}



static void Test_Sf_Us_BFu31ll()
{
  {
    init_simple_test("Sf_Us_BFu31ll");
    static STRUCT_IF_C Sf_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Sf_Us_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Sf_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu31ll, Sf_Us_BFu31ll)
//============================================================================


struct  Sf_Us_BFu32i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Us_BFu32i) C1{ FC2{} Fs Fi:32}



static void Test_Sf_Us_BFu32i()
{
  {
    init_simple_test("Sf_Us_BFu32i");
    static STRUCT_IF_C Sf_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Sf_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Sf_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu32i, Sf_Us_BFu32i)
//============================================================================


struct  Sf_Us_BFu32ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Us_BFu32ll) C1{ FC2{} Fs FL:32}



static void Test_Sf_Us_BFu32ll()
{
  {
    init_simple_test("Sf_Us_BFu32ll");
    static STRUCT_IF_C Sf_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Sf_Us_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Sf_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu32ll, Sf_Us_BFu32ll)
//============================================================================


struct  Sf_Us_BFu33  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Us_BFu33) C1{ FC2{} Fs FL:33}



static void Test_Sf_Us_BFu33()
{
  {
    init_simple_test("Sf_Us_BFu33");
    static STRUCT_IF_C Sf_Us_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Sf_Us_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Sf_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu33, Sf_Us_BFu33)
//============================================================================


struct  Sf_Us_BFu7c  {
  struct empty v1;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Us_BFu7c) C1{ FC2{} Fs Fc:7}



static void Test_Sf_Us_BFu7c()
{
  {
    init_simple_test("Sf_Us_BFu7c");
    static STRUCT_IF_C Sf_Us_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Us_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu7c, Sf_Us_BFu7c)
//============================================================================


struct  Sf_Us_BFu7i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Us_BFu7i) C1{ FC2{} Fs Fi:7}



static void Test_Sf_Us_BFu7i()
{
  {
    init_simple_test("Sf_Us_BFu7i");
    static STRUCT_IF_C Sf_Us_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Us_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu7i, Sf_Us_BFu7i)
//============================================================================


struct  Sf_Us_BFu7ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Us_BFu7ll) C1{ FC2{} Fs FL:7}



static void Test_Sf_Us_BFu7ll()
{
  {
    init_simple_test("Sf_Us_BFu7ll");
    static STRUCT_IF_C Sf_Us_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Us_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu7ll, Sf_Us_BFu7ll)
//============================================================================


struct  Sf_Us_BFu7s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Us_BFu7s) C1{ FC2{} Fs Fs:7}



static void Test_Sf_Us_BFu7s()
{
  {
    init_simple_test("Sf_Us_BFu7s");
    static STRUCT_IF_C Sf_Us_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Sf_Us_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Sf_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu7s, Sf_Us_BFu7s)
//============================================================================


struct  Sf_Us_BFu8c  {
  struct empty v1;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Us_BFu8c) C1{ FC2{} Fs Fc:8}



static void Test_Sf_Us_BFu8c()
{
  {
    init_simple_test("Sf_Us_BFu8c");
    static STRUCT_IF_C Sf_Us_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Us_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu8c, Sf_Us_BFu8c)
//============================================================================


struct  Sf_Us_BFu8i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Us_BFu8i) C1{ FC2{} Fs Fi:8}



static void Test_Sf_Us_BFu8i()
{
  {
    init_simple_test("Sf_Us_BFu8i");
    static STRUCT_IF_C Sf_Us_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Us_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu8i, Sf_Us_BFu8i)
//============================================================================


struct  Sf_Us_BFu8ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Us_BFu8ll) C1{ FC2{} Fs FL:8}



static void Test_Sf_Us_BFu8ll()
{
  {
    init_simple_test("Sf_Us_BFu8ll");
    static STRUCT_IF_C Sf_Us_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Us_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu8ll, Sf_Us_BFu8ll)
//============================================================================


struct  Sf_Us_BFu8s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Us_BFu8s) C1{ FC2{} Fs Fs:8}



static void Test_Sf_Us_BFu8s()
{
  {
    init_simple_test("Sf_Us_BFu8s");
    static STRUCT_IF_C Sf_Us_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Sf_Us_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Sf_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu8s, Sf_Us_BFu8s)
//============================================================================


struct  Sf_Us_BFu9i  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Us_BFu9i) C1{ FC2{} Fs Fi:9}



static void Test_Sf_Us_BFu9i()
{
  {
    init_simple_test("Sf_Us_BFu9i");
    static STRUCT_IF_C Sf_Us_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Us_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu9i, Sf_Us_BFu9i)
//============================================================================


struct  Sf_Us_BFu9ll  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Us_BFu9ll) C1{ FC2{} Fs FL:9}



static void Test_Sf_Us_BFu9ll()
{
  {
    init_simple_test("Sf_Us_BFu9ll");
    static STRUCT_IF_C Sf_Us_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Us_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu9ll, Sf_Us_BFu9ll)
//============================================================================


struct  Sf_Us_BFu9s  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Us_BFu9s) C1{ FC2{} Fs Fs:9}



static void Test_Sf_Us_BFu9s()
{
  {
    init_simple_test("Sf_Us_BFu9s");
    static STRUCT_IF_C Sf_Us_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Us_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Sf_Us_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Sf_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_BFu9s, Sf_Us_BFu9s)
//============================================================================


struct  Sf_Us_C  {
  struct empty v1;
  unsigned short v2;
  char v3;
};
//SIG(1 Sf_Us_C) C1{ FC2{} Fs Fc}



static void Test_Sf_Us_C()
{
  {
    init_simple_test("Sf_Us_C");
    STRUCT_IF_C Sf_Us_C lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_C)");
    check_field_offset(lv, v1, 0, "Sf_Us_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_C.v2");
    check_field_offset(lv, v3, 2, "Sf_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_C, Sf_Us_C)
//============================================================================


struct  Sf_Us_D  {
  struct empty v1;
  unsigned short v2;
  double v3;
};
//SIG(1 Sf_Us_D) C1{ FC2{} Fs FL}



static void Test_Sf_Us_D()
{
  {
    init_simple_test("Sf_Us_D");
    STRUCT_IF_C Sf_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_D)");
    check_field_offset(lv, v1, 0, "Sf_Us_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_D, Sf_Us_D)
//============================================================================


struct  Sf_Us_F  {
  struct empty v1;
  unsigned short v2;
  float v3;
};
//SIG(1 Sf_Us_F) C1{ FC2{} Fs Fi}



static void Test_Sf_Us_F()
{
  {
    init_simple_test("Sf_Us_F");
    STRUCT_IF_C Sf_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_F)");
    check_field_offset(lv, v1, 0, "Sf_Us_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_F.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_F, Sf_Us_F)
//============================================================================


struct  Sf_Us_I  {
  struct empty v1;
  unsigned short v2;
  int v3;
};
//SIG(1 Sf_Us_I) C1{ FC2{} Fs Fi}



static void Test_Sf_Us_I()
{
  {
    init_simple_test("Sf_Us_I");
    STRUCT_IF_C Sf_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_I)");
    check_field_offset(lv, v1, 0, "Sf_Us_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_I.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_I, Sf_Us_I)
//============================================================================


struct  Sf_Us_Ip  {
  struct empty v1;
  unsigned short v2;
  int *v3;
};
//SIG(1 Sf_Us_Ip) C1{ FC2{} Fs Fp}



static void Test_Sf_Us_Ip()
{
  {
    init_simple_test("Sf_Us_Ip");
    STRUCT_IF_C Sf_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Us_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Ip, Sf_Us_Ip)
//============================================================================


struct  Sf_Us_L  {
  struct empty v1;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 Sf_Us_L) C1{ FC2{} Fs FL}



static void Test_Sf_Us_L()
{
  {
    init_simple_test("Sf_Us_L");
    STRUCT_IF_C Sf_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_L)");
    check_field_offset(lv, v1, 0, "Sf_Us_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_L, Sf_Us_L)
//============================================================================


struct  Sf_Us_S  {
  struct empty v1;
  unsigned short v2;
  short v3;
};
//SIG(1 Sf_Us_S) C1{ FC2{} Fs[2]}



static void Test_Sf_Us_S()
{
  {
    init_simple_test("Sf_Us_S");
    STRUCT_IF_C Sf_Us_S lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_S)");
    check_field_offset(lv, v1, 0, "Sf_Us_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_S.v2");
    check_field_offset(lv, v3, 2, "Sf_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_S, Sf_Us_S)
//============================================================================


struct  Sf_Us_Sf  {
  struct empty v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Sf_Us_Sf) C1{ FC2{} Fs FC2}



static void Test_Sf_Us_Sf()
{
  {
    init_simple_test("Sf_Us_Sf");
    STRUCT_IF_C Sf_Us_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Sf_Us_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Us_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Sf.v2");
    check_field_offset(lv, v3, 2, "Sf_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Sf, Sf_Us_Sf)
//============================================================================


struct  Sf_Us_Uc  {
  struct empty v1;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 Sf_Us_Uc) C1{ FC2{} Fs Fc}



static void Test_Sf_Us_Uc()
{
  {
    init_simple_test("Sf_Us_Uc");
    STRUCT_IF_C Sf_Us_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Us_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Uc.v2");
    check_field_offset(lv, v3, 2, "Sf_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Uc, Sf_Us_Uc)
//============================================================================


struct  Sf_Us_Ui  {
  struct empty v1;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 Sf_Us_Ui) C1{ FC2{} Fs Fi}



static void Test_Sf_Us_Ui()
{
  {
    init_simple_test("Sf_Us_Ui");
    STRUCT_IF_C Sf_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Sf_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Sf_Us_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Us_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "Sf_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Ui, Sf_Us_Ui)
//============================================================================


struct  Sf_Us_Ul  {
  struct empty v1;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 Sf_Us_Ul) C1{ FC2{} Fs FL}



static void Test_Sf_Us_Ul()
{
  {
    init_simple_test("Sf_Us_Ul");
    STRUCT_IF_C Sf_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Us_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Ul, Sf_Us_Ul)
//============================================================================


struct  Sf_Us_Us  {
  struct empty v1;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 Sf_Us_Us) C1{ FC2{} Fs[2]}



static void Test_Sf_Us_Us()
{
  {
    init_simple_test("Sf_Us_Us");
    STRUCT_IF_C Sf_Us_Us lv;
    check2(sizeof(lv), 4, "sizeof(Sf_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Sf_Us_Us)");
    check_field_offset(lv, v1, 0, "Sf_Us_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Us.v2");
    check_field_offset(lv, v3, 2, "Sf_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Us, Sf_Us_Us)
//============================================================================


struct  Sf_Us_Vp  {
  struct empty v1;
  unsigned short v2;
  void *v3;
};
//SIG(1 Sf_Us_Vp) C1{ FC2{} Fs Fp}



static void Test_Sf_Us_Vp()
{
  {
    init_simple_test("Sf_Us_Vp");
    STRUCT_IF_C Sf_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Us_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Us_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Us_Vp, Sf_Us_Vp)
//============================================================================


struct  Sf_Vp  {
  struct empty v1;
  void *v2;
};
//SIG(1 Sf_Vp) C1{ FC2{} Fp}



static void Test_Sf_Vp()
{
  {
    init_simple_test("Sf_Vp");
    STRUCT_IF_C Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp, Sf_Vp)
//============================================================================


struct  Sf_Vp_BFu15i  {
  struct empty v1;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 Sf_Vp_BFu15i) C1{ FC2{} Fp Fi:15}



static void Test_Sf_Vp_BFu15i()
{
  {
    init_simple_test("Sf_Vp_BFu15i");
    static STRUCT_IF_C Sf_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu15i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu15i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu15i, Sf_Vp_BFu15i)
//============================================================================


struct  Sf_Vp_BFu15ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 Sf_Vp_BFu15ll) C1{ FC2{} Fp FL:15}



static void Test_Sf_Vp_BFu15ll()
{
  {
    init_simple_test("Sf_Vp_BFu15ll");
    static STRUCT_IF_C Sf_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu15ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu15ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu15ll, Sf_Vp_BFu15ll)
//============================================================================


struct  Sf_Vp_BFu15s  {
  struct empty v1;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 Sf_Vp_BFu15s) C1{ FC2{} Fp Fs:15}



static void Test_Sf_Vp_BFu15s()
{
  {
    init_simple_test("Sf_Vp_BFu15s");
    static STRUCT_IF_C Sf_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu15s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu15s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Sf_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Sf_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu15s, Sf_Vp_BFu15s)
//============================================================================


struct  Sf_Vp_BFu16i  {
  struct empty v1;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 Sf_Vp_BFu16i) C1{ FC2{} Fp Fi:16}



static void Test_Sf_Vp_BFu16i()
{
  {
    init_simple_test("Sf_Vp_BFu16i");
    static STRUCT_IF_C Sf_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu16i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu16i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu16i, Sf_Vp_BFu16i)
//============================================================================


struct  Sf_Vp_BFu16ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 Sf_Vp_BFu16ll) C1{ FC2{} Fp FL:16}



static void Test_Sf_Vp_BFu16ll()
{
  {
    init_simple_test("Sf_Vp_BFu16ll");
    static STRUCT_IF_C Sf_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu16ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu16ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu16ll, Sf_Vp_BFu16ll)
//============================================================================


struct  Sf_Vp_BFu16s  {
  struct empty v1;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 Sf_Vp_BFu16s) C1{ FC2{} Fp Fs:16}



static void Test_Sf_Vp_BFu16s()
{
  {
    init_simple_test("Sf_Vp_BFu16s");
    static STRUCT_IF_C Sf_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu16s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu16s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Sf_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Sf_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu16s, Sf_Vp_BFu16s)
//============================================================================


struct  Sf_Vp_BFu17i  {
  struct empty v1;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 Sf_Vp_BFu17i) C1{ FC2{} Fp Fi:17}



static void Test_Sf_Vp_BFu17i()
{
  {
    init_simple_test("Sf_Vp_BFu17i");
    static STRUCT_IF_C Sf_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu17i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu17i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Sf_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Sf_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu17i, Sf_Vp_BFu17i)
//============================================================================


struct  Sf_Vp_BFu17ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 Sf_Vp_BFu17ll) C1{ FC2{} Fp FL:17}



static void Test_Sf_Vp_BFu17ll()
{
  {
    init_simple_test("Sf_Vp_BFu17ll");
    static STRUCT_IF_C Sf_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu17ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu17ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Sf_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Sf_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu17ll, Sf_Vp_BFu17ll)
//============================================================================


struct  Sf_Vp_BFu1c  {
  struct empty v1;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 Sf_Vp_BFu1c) C1{ FC2{} Fp Fc:1}



static void Test_Sf_Vp_BFu1c()
{
  {
    init_simple_test("Sf_Vp_BFu1c");
    static STRUCT_IF_C Sf_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu1c)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu1c.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu1c, Sf_Vp_BFu1c)
//============================================================================


struct  Sf_Vp_BFu1i  {
  struct empty v1;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 Sf_Vp_BFu1i) C1{ FC2{} Fp Fi:1}



static void Test_Sf_Vp_BFu1i()
{
  {
    init_simple_test("Sf_Vp_BFu1i");
    static STRUCT_IF_C Sf_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu1i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu1i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu1i, Sf_Vp_BFu1i)
//============================================================================


struct  Sf_Vp_BFu1ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 Sf_Vp_BFu1ll) C1{ FC2{} Fp FL:1}



static void Test_Sf_Vp_BFu1ll()
{
  {
    init_simple_test("Sf_Vp_BFu1ll");
    static STRUCT_IF_C Sf_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu1ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu1ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu1ll, Sf_Vp_BFu1ll)
//============================================================================


struct  Sf_Vp_BFu1s  {
  struct empty v1;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 Sf_Vp_BFu1s) C1{ FC2{} Fp Fs:1}



static void Test_Sf_Vp_BFu1s()
{
  {
    init_simple_test("Sf_Vp_BFu1s");
    static STRUCT_IF_C Sf_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu1s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu1s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Sf_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu1s, Sf_Vp_BFu1s)
//============================================================================


struct  Sf_Vp_BFu31i  {
  struct empty v1;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 Sf_Vp_BFu31i) C1{ FC2{} Fp Fi:31}



static void Test_Sf_Vp_BFu31i()
{
  {
    init_simple_test("Sf_Vp_BFu31i");
    static STRUCT_IF_C Sf_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu31i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu31i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Sf_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Sf_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu31i, Sf_Vp_BFu31i)
//============================================================================


struct  Sf_Vp_BFu31ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 Sf_Vp_BFu31ll) C1{ FC2{} Fp FL:31}



static void Test_Sf_Vp_BFu31ll()
{
  {
    init_simple_test("Sf_Vp_BFu31ll");
    static STRUCT_IF_C Sf_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu31ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu31ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Sf_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Sf_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu31ll, Sf_Vp_BFu31ll)
//============================================================================


struct  Sf_Vp_BFu32i  {
  struct empty v1;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 Sf_Vp_BFu32i) C1{ FC2{} Fp Fi:32}



static void Test_Sf_Vp_BFu32i()
{
  {
    init_simple_test("Sf_Vp_BFu32i");
    static STRUCT_IF_C Sf_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu32i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu32i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Sf_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Sf_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu32i, Sf_Vp_BFu32i)
//============================================================================


struct  Sf_Vp_BFu32ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 Sf_Vp_BFu32ll) C1{ FC2{} Fp FL:32}



static void Test_Sf_Vp_BFu32ll()
{
  {
    init_simple_test("Sf_Vp_BFu32ll");
    static STRUCT_IF_C Sf_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu32ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu32ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Sf_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Sf_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu32ll, Sf_Vp_BFu32ll)
//============================================================================


struct  Sf_Vp_BFu33  {
  struct empty v1;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 Sf_Vp_BFu33) C1{ FC2{} Fp FL:33}



static void Test_Sf_Vp_BFu33()
{
  {
    init_simple_test("Sf_Vp_BFu33");
    static STRUCT_IF_C Sf_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu33)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu33.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Sf_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Sf_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu33, Sf_Vp_BFu33)
//============================================================================


struct  Sf_Vp_BFu7c  {
  struct empty v1;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 Sf_Vp_BFu7c) C1{ FC2{} Fp Fc:7}



static void Test_Sf_Vp_BFu7c()
{
  {
    init_simple_test("Sf_Vp_BFu7c");
    static STRUCT_IF_C Sf_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu7c)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu7c.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu7c, Sf_Vp_BFu7c)
//============================================================================


struct  Sf_Vp_BFu7i  {
  struct empty v1;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 Sf_Vp_BFu7i) C1{ FC2{} Fp Fi:7}



static void Test_Sf_Vp_BFu7i()
{
  {
    init_simple_test("Sf_Vp_BFu7i");
    static STRUCT_IF_C Sf_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu7i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu7i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu7i, Sf_Vp_BFu7i)
//============================================================================


struct  Sf_Vp_BFu7ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 Sf_Vp_BFu7ll) C1{ FC2{} Fp FL:7}



static void Test_Sf_Vp_BFu7ll()
{
  {
    init_simple_test("Sf_Vp_BFu7ll");
    static STRUCT_IF_C Sf_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu7ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu7ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu7ll, Sf_Vp_BFu7ll)
//============================================================================


struct  Sf_Vp_BFu7s  {
  struct empty v1;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 Sf_Vp_BFu7s) C1{ FC2{} Fp Fs:7}



static void Test_Sf_Vp_BFu7s()
{
  {
    init_simple_test("Sf_Vp_BFu7s");
    static STRUCT_IF_C Sf_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu7s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu7s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Sf_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Sf_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu7s, Sf_Vp_BFu7s)
//============================================================================


struct  Sf_Vp_BFu8c  {
  struct empty v1;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 Sf_Vp_BFu8c) C1{ FC2{} Fp Fc:8}



static void Test_Sf_Vp_BFu8c()
{
  {
    init_simple_test("Sf_Vp_BFu8c");
    static STRUCT_IF_C Sf_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu8c)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu8c.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu8c, Sf_Vp_BFu8c)
//============================================================================


struct  Sf_Vp_BFu8i  {
  struct empty v1;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 Sf_Vp_BFu8i) C1{ FC2{} Fp Fi:8}



static void Test_Sf_Vp_BFu8i()
{
  {
    init_simple_test("Sf_Vp_BFu8i");
    static STRUCT_IF_C Sf_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu8i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu8i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu8i, Sf_Vp_BFu8i)
//============================================================================


struct  Sf_Vp_BFu8ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 Sf_Vp_BFu8ll) C1{ FC2{} Fp FL:8}



static void Test_Sf_Vp_BFu8ll()
{
  {
    init_simple_test("Sf_Vp_BFu8ll");
    static STRUCT_IF_C Sf_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu8ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu8ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu8ll, Sf_Vp_BFu8ll)
//============================================================================


struct  Sf_Vp_BFu8s  {
  struct empty v1;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 Sf_Vp_BFu8s) C1{ FC2{} Fp Fs:8}



static void Test_Sf_Vp_BFu8s()
{
  {
    init_simple_test("Sf_Vp_BFu8s");
    static STRUCT_IF_C Sf_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu8s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu8s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Sf_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Sf_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu8s, Sf_Vp_BFu8s)
//============================================================================


struct  Sf_Vp_BFu9i  {
  struct empty v1;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 Sf_Vp_BFu9i) C1{ FC2{} Fp Fi:9}



static void Test_Sf_Vp_BFu9i()
{
  {
    init_simple_test("Sf_Vp_BFu9i");
    static STRUCT_IF_C Sf_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu9i)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu9i.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu9i, Sf_Vp_BFu9i)
//============================================================================


struct  Sf_Vp_BFu9ll  {
  struct empty v1;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 Sf_Vp_BFu9ll) C1{ FC2{} Fp FL:9}



static void Test_Sf_Vp_BFu9ll()
{
  {
    init_simple_test("Sf_Vp_BFu9ll");
    static STRUCT_IF_C Sf_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu9ll)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu9ll.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu9ll, Sf_Vp_BFu9ll)
//============================================================================


struct  Sf_Vp_BFu9s  {
  struct empty v1;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 Sf_Vp_BFu9s) C1{ FC2{} Fp Fs:9}



static void Test_Sf_Vp_BFu9s()
{
  {
    init_simple_test("Sf_Vp_BFu9s");
    static STRUCT_IF_C Sf_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_BFu9s)");
    check_field_offset(lv, v1, 0, "Sf_Vp_BFu9s.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Sf_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Sf_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_BFu9s, Sf_Vp_BFu9s)
//============================================================================


struct  Sf_Vp_C  {
  struct empty v1;
  void *v2;
  char v3;
};
//SIG(1 Sf_Vp_C) C1{ FC2{} Fp Fc}



static void Test_Sf_Vp_C()
{
  {
    init_simple_test("Sf_Vp_C");
    STRUCT_IF_C Sf_Vp_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_C)");
    check_field_offset(lv, v1, 0, "Sf_Vp_C.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_C, Sf_Vp_C)
//============================================================================


struct  Sf_Vp_D  {
  struct empty v1;
  void *v2;
  double v3;
};
//SIG(1 Sf_Vp_D) C1{ FC2{} Fp FL}



static void Test_Sf_Vp_D()
{
  {
    init_simple_test("Sf_Vp_D");
    STRUCT_IF_C Sf_Vp_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_D)");
    check_field_offset(lv, v1, 0, "Sf_Vp_D.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_D, Sf_Vp_D)
//============================================================================


struct  Sf_Vp_F  {
  struct empty v1;
  void *v2;
  float v3;
};
//SIG(1 Sf_Vp_F) C1{ FC2{} Fp Fi}



static void Test_Sf_Vp_F()
{
  {
    init_simple_test("Sf_Vp_F");
    STRUCT_IF_C Sf_Vp_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_F)");
    check_field_offset(lv, v1, 0, "Sf_Vp_F.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_F, Sf_Vp_F)
//============================================================================


struct  Sf_Vp_I  {
  struct empty v1;
  void *v2;
  int v3;
};
//SIG(1 Sf_Vp_I) C1{ FC2{} Fp Fi}



static void Test_Sf_Vp_I()
{
  {
    init_simple_test("Sf_Vp_I");
    STRUCT_IF_C Sf_Vp_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_I)");
    check_field_offset(lv, v1, 0, "Sf_Vp_I.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_I, Sf_Vp_I)
//============================================================================


struct  Sf_Vp_Ip  {
  struct empty v1;
  void *v2;
  int *v3;
};
//SIG(1 Sf_Vp_Ip) C1{ FC2{} Fp[2]}



static void Test_Sf_Vp_Ip()
{
  {
    init_simple_test("Sf_Vp_Ip");
    STRUCT_IF_C Sf_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Ip)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Ip.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Ip, Sf_Vp_Ip)
//============================================================================


struct  Sf_Vp_L  {
  struct empty v1;
  void *v2;
  __tsi64 v3;
};
//SIG(1 Sf_Vp_L) C1{ FC2{} Fp FL}



static void Test_Sf_Vp_L()
{
  {
    init_simple_test("Sf_Vp_L");
    STRUCT_IF_C Sf_Vp_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_L)");
    check_field_offset(lv, v1, 0, "Sf_Vp_L.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_L, Sf_Vp_L)
//============================================================================


struct  Sf_Vp_S  {
  struct empty v1;
  void *v2;
  short v3;
};
//SIG(1 Sf_Vp_S) C1{ FC2{} Fp Fs}



static void Test_Sf_Vp_S()
{
  {
    init_simple_test("Sf_Vp_S");
    STRUCT_IF_C Sf_Vp_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_S)");
    check_field_offset(lv, v1, 0, "Sf_Vp_S.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_S, Sf_Vp_S)
//============================================================================


struct  Sf_Vp_Sf  {
  struct empty v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Sf_Vp_Sf) C1{ FC2{} Fp FC2}



static void Test_Sf_Vp_Sf()
{
  {
    init_simple_test("Sf_Vp_Sf");
    STRUCT_IF_C Sf_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Sf_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Sf.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Sf, Sf_Vp_Sf)
//============================================================================


struct  Sf_Vp_Uc  {
  struct empty v1;
  void *v2;
  unsigned char v3;
};
//SIG(1 Sf_Vp_Uc) C1{ FC2{} Fp Fc}



static void Test_Sf_Vp_Uc()
{
  {
    init_simple_test("Sf_Vp_Uc");
    STRUCT_IF_C Sf_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Uc)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Uc.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Uc, Sf_Vp_Uc)
//============================================================================


struct  Sf_Vp_Ui  {
  struct empty v1;
  void *v2;
  unsigned int v3;
};
//SIG(1 Sf_Vp_Ui) C1{ FC2{} Fp Fi}



static void Test_Sf_Vp_Ui()
{
  {
    init_simple_test("Sf_Vp_Ui");
    STRUCT_IF_C Sf_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Ui)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Ui.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Ui, Sf_Vp_Ui)
//============================================================================


struct  Sf_Vp_Ul  {
  struct empty v1;
  void *v2;
  __tsu64 v3;
};
//SIG(1 Sf_Vp_Ul) C1{ FC2{} Fp FL}



static void Test_Sf_Vp_Ul()
{
  {
    init_simple_test("Sf_Vp_Ul");
    STRUCT_IF_C Sf_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Sf_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Ul)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Ul.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Ul, Sf_Vp_Ul)
//============================================================================


struct  Sf_Vp_Us  {
  struct empty v1;
  void *v2;
  unsigned short v3;
};
//SIG(1 Sf_Vp_Us) C1{ FC2{} Fp Fs}



static void Test_Sf_Vp_Us()
{
  {
    init_simple_test("Sf_Vp_Us");
    STRUCT_IF_C Sf_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Us)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Us.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Us, Sf_Vp_Us)
//============================================================================


struct  Sf_Vp_Vp  {
  struct empty v1;
  void *v2;
  void *v3;
};
//SIG(1 Sf_Vp_Vp) C1{ FC2{} Fp[2]}



static void Test_Sf_Vp_Vp()
{
  {
    init_simple_test("Sf_Vp_Vp");
    STRUCT_IF_C Sf_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Sf_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Sf_Vp_Vp)");
    check_field_offset(lv, v1, 0, "Sf_Vp_Vp.v1");
    check_field_offset(lv, v2, 0, "Sf_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Sf_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Sf_Vp_Vp, Sf_Vp_Vp)
//============================================================================


struct  Uc_BFu15i_Sf  {
  unsigned char v1;
  unsigned int v2:15;
  struct empty v3;
};
//SIG(1 Uc_BFu15i_Sf) C1{ Fc Fi:15 FC2{}}



static void Test_Uc_BFu15i_Sf()
{
  {
    init_simple_test("Uc_BFu15i_Sf");
    static STRUCT_IF_C Uc_BFu15i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu15i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15i_Sf, Uc_BFu15i_Sf)
//============================================================================


struct  Uc_BFu15ll_Sf  {
  unsigned char v1;
  __tsu64 v2:15;
  struct empty v3;
};
//SIG(1 Uc_BFu15ll_Sf) C1{ Fc FL:15 FC2{}}



static void Test_Uc_BFu15ll_Sf()
{
  {
    init_simple_test("Uc_BFu15ll_Sf");
    static STRUCT_IF_C Uc_BFu15ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu15ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu15ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15ll_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu15ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15ll_Sf, Uc_BFu15ll_Sf)
//============================================================================


struct  Uc_BFu15s_Sf  {
  unsigned char v1;
  unsigned short v2:15;
  struct empty v3;
};
//SIG(1 Uc_BFu15s_Sf) C1{ Fc Fs:15 FC2{}}



static void Test_Uc_BFu15s_Sf()
{
  {
    init_simple_test("Uc_BFu15s_Sf");
    static STRUCT_IF_C Uc_BFu15s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu15s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_Sf");
    check_field_offset(lv, v3, 4, "Uc_BFu15s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15s_Sf, Uc_BFu15s_Sf)
//============================================================================


struct  Uc_BFu16i_Sf  {
  unsigned char v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Uc_BFu16i_Sf) C1{ Fc Fi:16 FC2{}}



static void Test_Uc_BFu16i_Sf()
{
  {
    init_simple_test("Uc_BFu16i_Sf");
    static STRUCT_IF_C Uc_BFu16i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16i_Sf, Uc_BFu16i_Sf)
//============================================================================


struct  Uc_BFu16ll_Sf  {
  unsigned char v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Uc_BFu16ll_Sf) C1{ Fc FL:16 FC2{}}



static void Test_Uc_BFu16ll_Sf()
{
  {
    init_simple_test("Uc_BFu16ll_Sf");
    static STRUCT_IF_C Uc_BFu16ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16ll_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16ll_Sf, Uc_BFu16ll_Sf)
//============================================================================


struct  Uc_BFu16s_Sf  {
  unsigned char v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Uc_BFu16s_Sf) C1{ Fc Fs:16 FC2{}}



static void Test_Uc_BFu16s_Sf()
{
  {
    init_simple_test("Uc_BFu16s_Sf");
    static STRUCT_IF_C Uc_BFu16s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu16s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu16s_Sf");
    check_field_offset(lv, v3, 4, "Uc_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16s_Sf, Uc_BFu16s_Sf)
//============================================================================


struct  Uc_BFu17i_Sf  {
  unsigned char v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Uc_BFu17i_Sf) C1{ Fc Fi:17 FC2{}}



static void Test_Uc_BFu17i_Sf()
{
  {
    init_simple_test("Uc_BFu17i_Sf");
    static STRUCT_IF_C Uc_BFu17i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_Sf");
    check_field_offset(lv, v3, 4, "Uc_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu17i_Sf, Uc_BFu17i_Sf)
//============================================================================


struct  Uc_BFu17ll_Sf  {
  unsigned char v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Uc_BFu17ll_Sf) C1{ Fc FL:17 FC2{}}



static void Test_Uc_BFu17ll_Sf()
{
  {
    init_simple_test("Uc_BFu17ll_Sf");
    static STRUCT_IF_C Uc_BFu17ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17ll_Sf");
    check_field_offset(lv, v3, 4, "Uc_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu17ll_Sf, Uc_BFu17ll_Sf)
//============================================================================


struct  Uc_BFu1c_Sf  {
  unsigned char v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Uc_BFu1c_Sf) C1{ Fc Fc:1 FC2{}}



static void Test_Uc_BFu1c_Sf()
{
  {
    init_simple_test("Uc_BFu1c_Sf");
    static STRUCT_IF_C Uc_BFu1c_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1c_Sf, Uc_BFu1c_Sf)
//============================================================================


struct  Uc_BFu1i_Sf  {
  unsigned char v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Uc_BFu1i_Sf) C1{ Fc Fi:1 FC2{}}



static void Test_Uc_BFu1i_Sf()
{
  {
    init_simple_test("Uc_BFu1i_Sf");
    static STRUCT_IF_C Uc_BFu1i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1i_Sf, Uc_BFu1i_Sf)
//============================================================================


struct  Uc_BFu1ll_Sf  {
  unsigned char v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Uc_BFu1ll_Sf) C1{ Fc FL:1 FC2{}}



static void Test_Uc_BFu1ll_Sf()
{
  {
    init_simple_test("Uc_BFu1ll_Sf");
    static STRUCT_IF_C Uc_BFu1ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1ll_Sf, Uc_BFu1ll_Sf)
//============================================================================


struct  Uc_BFu1s_Sf  {
  unsigned char v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Uc_BFu1s_Sf) C1{ Fc Fs:1 FC2{}}



static void Test_Uc_BFu1s_Sf()
{
  {
    init_simple_test("Uc_BFu1s_Sf");
    static STRUCT_IF_C Uc_BFu1s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1s_Sf, Uc_BFu1s_Sf)
//============================================================================


struct  Uc_BFu31i_Sf  {
  unsigned char v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Uc_BFu31i_Sf) C1{ Fc Fi:31 FC2{}}



static void Test_Uc_BFu31i_Sf()
{
  {
    init_simple_test("Uc_BFu31i_Sf");
    static STRUCT_IF_C Uc_BFu31i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu31i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu31i_Sf");
    check_field_offset(lv, v3, 8, "Uc_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu31i_Sf, Uc_BFu31i_Sf)
//============================================================================


struct  Uc_BFu31ll_Sf  {
  unsigned char v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Uc_BFu31ll_Sf) C1{ Fc FL:31 FC2{}}



static void Test_Uc_BFu31ll_Sf()
{
  {
    init_simple_test("Uc_BFu31ll_Sf");
    static STRUCT_IF_C Uc_BFu31ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu31ll_Sf");
    check_field_offset(lv, v3, 5, "Uc_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu31ll_Sf, Uc_BFu31ll_Sf)
//============================================================================


struct  Uc_BFu32i_Sf  {
  unsigned char v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Uc_BFu32i_Sf) C1{ Fc Fi:32 FC2{}}



static void Test_Uc_BFu32i_Sf()
{
  {
    init_simple_test("Uc_BFu32i_Sf");
    static STRUCT_IF_C Uc_BFu32i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_Sf");
    check_field_offset(lv, v3, 8, "Uc_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32i_Sf, Uc_BFu32i_Sf)
//============================================================================


struct  Uc_BFu32ll_Sf  {
  unsigned char v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Uc_BFu32ll_Sf) C1{ Fc FL:32 FC2{}}



static void Test_Uc_BFu32ll_Sf()
{
  {
    init_simple_test("Uc_BFu32ll_Sf");
    static STRUCT_IF_C Uc_BFu32ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_Sf");
    check_field_offset(lv, v3, 5, "Uc_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32ll_Sf, Uc_BFu32ll_Sf)
//============================================================================


struct  Uc_BFu33_Sf  {
  unsigned char v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Uc_BFu33_Sf) C1{ Fc FL:33 FC2{}}



static void Test_Uc_BFu33_Sf()
{
  {
    init_simple_test("Uc_BFu33_Sf");
    static STRUCT_IF_C Uc_BFu33_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_Sf");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_Sf");
    check_field_offset(lv, v3, 6, "Uc_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu33_Sf, Uc_BFu33_Sf)
//============================================================================


struct  Uc_BFu7c_Sf  {
  unsigned char v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Uc_BFu7c_Sf) C1{ Fc Fc:7 FC2{}}



static void Test_Uc_BFu7c_Sf()
{
  {
    init_simple_test("Uc_BFu7c_Sf");
    static STRUCT_IF_C Uc_BFu7c_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7c_Sf, Uc_BFu7c_Sf)
//============================================================================


struct  Uc_BFu7i_Sf  {
  unsigned char v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Uc_BFu7i_Sf) C1{ Fc Fi:7 FC2{}}



static void Test_Uc_BFu7i_Sf()
{
  {
    init_simple_test("Uc_BFu7i_Sf");
    static STRUCT_IF_C Uc_BFu7i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7i_Sf, Uc_BFu7i_Sf)
//============================================================================


struct  Uc_BFu7ll_Sf  {
  unsigned char v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Uc_BFu7ll_Sf) C1{ Fc FL:7 FC2{}}



static void Test_Uc_BFu7ll_Sf()
{
  {
    init_simple_test("Uc_BFu7ll_Sf");
    static STRUCT_IF_C Uc_BFu7ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7ll_Sf, Uc_BFu7ll_Sf)
//============================================================================


struct  Uc_BFu7s_Sf  {
  unsigned char v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Uc_BFu7s_Sf) C1{ Fc Fs:7 FC2{}}



static void Test_Uc_BFu7s_Sf()
{
  {
    init_simple_test("Uc_BFu7s_Sf");
    static STRUCT_IF_C Uc_BFu7s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_Sf");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7s_Sf, Uc_BFu7s_Sf)
//============================================================================


struct  Uc_BFu8c_Sf  {
  unsigned char v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Uc_BFu8c_Sf) C1{ Fc Fc:8 FC2{}}



static void Test_Uc_BFu8c_Sf()
{
  {
    init_simple_test("Uc_BFu8c_Sf");
    static STRUCT_IF_C Uc_BFu8c_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8c_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8c_Sf, Uc_BFu8c_Sf)
//============================================================================


struct  Uc_BFu8i_Sf  {
  unsigned char v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Uc_BFu8i_Sf) C1{ Fc Fi:8 FC2{}}



static void Test_Uc_BFu8i_Sf()
{
  {
    init_simple_test("Uc_BFu8i_Sf");
    static STRUCT_IF_C Uc_BFu8i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8i_Sf, Uc_BFu8i_Sf)
//============================================================================


struct  Uc_BFu8ll_Sf  {
  unsigned char v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Uc_BFu8ll_Sf) C1{ Fc FL:8 FC2{}}



static void Test_Uc_BFu8ll_Sf()
{
  {
    init_simple_test("Uc_BFu8ll_Sf");
    static STRUCT_IF_C Uc_BFu8ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8ll_Sf, Uc_BFu8ll_Sf)
//============================================================================


struct  Uc_BFu8s_Sf  {
  unsigned char v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Uc_BFu8s_Sf) C1{ Fc Fs:8 FC2{}}



static void Test_Uc_BFu8s_Sf()
{
  {
    init_simple_test("Uc_BFu8s_Sf");
    static STRUCT_IF_C Uc_BFu8s_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_Sf");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_Sf");
    check_field_offset(lv, v3, 2, "Uc_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8s_Sf, Uc_BFu8s_Sf)
//============================================================================


struct  Uc_BFu9i_Sf  {
  unsigned char v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Uc_BFu9i_Sf) C1{ Fc Fi:9 FC2{}}



static void Test_Uc_BFu9i_Sf()
{
  {
    init_simple_test("Uc_BFu9i_Sf");
    static STRUCT_IF_C Uc_BFu9i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_Sf");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9i_Sf, Uc_BFu9i_Sf)
//============================================================================


struct  Uc_BFu9ll_Sf  {
  unsigned char v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Uc_BFu9ll_Sf) C1{ Fc FL:9 FC2{}}



static void Test_Uc_BFu9ll_Sf()
{
  {
    init_simple_test("Uc_BFu9ll_Sf");
    static STRUCT_IF_C Uc_BFu9ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_Sf");
    check_field_offset(lv, v3, 3, "Uc_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9ll_Sf, Uc_BFu9ll_Sf)
//============================================================================


struct  Uc_BFu9s_Sf  {
  unsigned char v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Uc_BFu9s_Sf) C1{ Fc Fs:9 FC2{}}



static void Test_Uc_BFu9s_Sf()
{
  {
    init_simple_test("Uc_BFu9s_Sf");
    static STRUCT_IF_C Uc_BFu9s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_Sf");
    check_field_offset(lv, v3, 4, "Uc_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9s_Sf, Uc_BFu9s_Sf)
//============================================================================


struct  Uc_C_Sf  {
  unsigned char v1;
  char v2;
  struct empty v3;
};
//SIG(1 Uc_C_Sf) C1{ Fc[2] FC2{}}



static void Test_Uc_C_Sf()
{
  {
    init_simple_test("Uc_C_Sf");
    STRUCT_IF_C Uc_C_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_C_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_C_Sf)");
    check_field_offset(lv, v1, 0, "Uc_C_Sf.v1");
    check_field_offset(lv, v2, 1, "Uc_C_Sf.v2");
    check_field_offset(lv, v3, 2, "Uc_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_C_Sf, Uc_C_Sf)
//============================================================================


struct  Uc_D_Sf  {
  unsigned char v1;
  double v2;
  struct empty v3;
};
//SIG(1 Uc_D_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_D_Sf()
{
  {
    init_simple_test("Uc_D_Sf");
    STRUCT_IF_C Uc_D_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_Sf)");
    check_field_offset(lv, v1, 0, "Uc_D_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Uc_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_D_Sf, Uc_D_Sf)
//============================================================================


struct  Uc_F_Sf  {
  unsigned char v1;
  float v2;
  struct empty v3;
};
//SIG(1 Uc_F_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_F_Sf()
{
  {
    init_simple_test("Uc_F_Sf");
    STRUCT_IF_C Uc_F_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_Sf)");
    check_field_offset(lv, v1, 0, "Uc_F_Sf.v1");
    check_field_offset(lv, v2, 4, "Uc_F_Sf.v2");
    check_field_offset(lv, v3, 8, "Uc_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_F_Sf, Uc_F_Sf)
//============================================================================


struct  Uc_I_Sf  {
  unsigned char v1;
  int v2;
  struct empty v3;
};
//SIG(1 Uc_I_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_I_Sf()
{
  {
    init_simple_test("Uc_I_Sf");
    STRUCT_IF_C Uc_I_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_Sf)");
    check_field_offset(lv, v1, 0, "Uc_I_Sf.v1");
    check_field_offset(lv, v2, 4, "Uc_I_Sf.v2");
    check_field_offset(lv, v3, 8, "Uc_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_I_Sf, Uc_I_Sf)
//============================================================================


struct  Uc_Ip_Sf  {
  unsigned char v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Uc_Ip_Sf) C1{ Fc Fp FC2{}}



static void Test_Uc_Ip_Sf()
{
  {
    init_simple_test("Uc_Ip_Sf");
    STRUCT_IF_C Uc_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Ip_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Uc_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ip_Sf, Uc_Ip_Sf)
//============================================================================


struct  Uc_L_Sf  {
  unsigned char v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Uc_L_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_L_Sf()
{
  {
    init_simple_test("Uc_L_Sf");
    STRUCT_IF_C Uc_L_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_Sf)");
    check_field_offset(lv, v1, 0, "Uc_L_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Uc_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_L_Sf, Uc_L_Sf)
//============================================================================


struct  Uc_S_Sf  {
  unsigned char v1;
  short v2;
  struct empty v3;
};
//SIG(1 Uc_S_Sf) C1{ Fc Fs FC2{}}



static void Test_Uc_S_Sf()
{
  {
    init_simple_test("Uc_S_Sf");
    STRUCT_IF_C Uc_S_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_S_Sf)");
    check_field_offset(lv, v1, 0, "Uc_S_Sf.v1");
    check_field_offset(lv, v2, 2, "Uc_S_Sf.v2");
    check_field_offset(lv, v3, 4, "Uc_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_S_Sf, Uc_S_Sf)
//============================================================================


struct  Uc_Sf  {
  unsigned char v1;
  struct empty v2;
};
//SIG(1 Uc_Sf) C1{ Fc FC2{}}



static void Test_Uc_Sf()
{
  {
    init_simple_test("Uc_Sf");
    STRUCT_IF_C Uc_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Uc_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Sf.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf, Uc_Sf)
//============================================================================


struct  Uc_Sf_BFu15i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Uc_Sf_BFu15i) C1{ Fc FC2{} Fi:15}



static void Test_Uc_Sf_BFu15i()
{
  {
    init_simple_test("Uc_Sf_BFu15i");
    static STRUCT_IF_C Uc_Sf_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu15i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Uc_Sf_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Uc_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu15i, Uc_Sf_BFu15i)
//============================================================================


struct  Uc_Sf_BFu15ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Uc_Sf_BFu15ll) C1{ Fc FC2{} FL:15}



static void Test_Uc_Sf_BFu15ll()
{
  {
    init_simple_test("Uc_Sf_BFu15ll");
    static STRUCT_IF_C Uc_Sf_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "Uc_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "Uc_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu15ll, Uc_Sf_BFu15ll)
//============================================================================


struct  Uc_Sf_BFu15s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Uc_Sf_BFu15s) C1{ Fc FC2{} Fs:15}



static void Test_Uc_Sf_BFu15s()
{
  {
    init_simple_test("Uc_Sf_BFu15s");
    static STRUCT_IF_C Uc_Sf_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu15s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Uc_Sf_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Uc_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu15s, Uc_Sf_BFu15s)
//============================================================================


struct  Uc_Sf_BFu16i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Uc_Sf_BFu16i) C1{ Fc FC2{} Fi:16}



static void Test_Uc_Sf_BFu16i()
{
  {
    init_simple_test("Uc_Sf_BFu16i");
    static STRUCT_IF_C Uc_Sf_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu16i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Uc_Sf_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Uc_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu16i, Uc_Sf_BFu16i)
//============================================================================


struct  Uc_Sf_BFu16ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Uc_Sf_BFu16ll) C1{ Fc FC2{} FL:16}



static void Test_Uc_Sf_BFu16ll()
{
  {
    init_simple_test("Uc_Sf_BFu16ll");
    static STRUCT_IF_C Uc_Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "Uc_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "Uc_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu16ll, Uc_Sf_BFu16ll)
//============================================================================


struct  Uc_Sf_BFu16s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Uc_Sf_BFu16s) C1{ Fc FC2{} Fs:16}



static void Test_Uc_Sf_BFu16s()
{
  {
    init_simple_test("Uc_Sf_BFu16s");
    static STRUCT_IF_C Uc_Sf_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu16s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Uc_Sf_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Uc_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu16s, Uc_Sf_BFu16s)
//============================================================================


struct  Uc_Sf_BFu17i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Uc_Sf_BFu17i) C1{ Fc FC2{} Fi:17}



static void Test_Uc_Sf_BFu17i()
{
  {
    init_simple_test("Uc_Sf_BFu17i");
    static STRUCT_IF_C Uc_Sf_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu17i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Uc_Sf_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Uc_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu17i, Uc_Sf_BFu17i)
//============================================================================


struct  Uc_Sf_BFu17ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Uc_Sf_BFu17ll) C1{ Fc FC2{} FL:17}



static void Test_Uc_Sf_BFu17ll()
{
  {
    init_simple_test("Uc_Sf_BFu17ll");
    static STRUCT_IF_C Uc_Sf_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "Uc_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "Uc_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu17ll, Uc_Sf_BFu17ll)
//============================================================================


struct  Uc_Sf_BFu1c  {
  unsigned char v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Uc_Sf_BFu1c) C1{ Fc FC2{} Fc:1}



static void Test_Uc_Sf_BFu1c()
{
  {
    init_simple_test("Uc_Sf_BFu1c");
    static STRUCT_IF_C Uc_Sf_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu1c.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Uc_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu1c, Uc_Sf_BFu1c)
//============================================================================


struct  Uc_Sf_BFu1i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Uc_Sf_BFu1i) C1{ Fc FC2{} Fi:1}



static void Test_Uc_Sf_BFu1i()
{
  {
    init_simple_test("Uc_Sf_BFu1i");
    static STRUCT_IF_C Uc_Sf_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu1i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Uc_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu1i, Uc_Sf_BFu1i)
//============================================================================


struct  Uc_Sf_BFu1ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Uc_Sf_BFu1ll) C1{ Fc FC2{} FL:1}



static void Test_Uc_Sf_BFu1ll()
{
  {
    init_simple_test("Uc_Sf_BFu1ll");
    static STRUCT_IF_C Uc_Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Uc_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu1ll, Uc_Sf_BFu1ll)
//============================================================================


struct  Uc_Sf_BFu1s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Uc_Sf_BFu1s) C1{ Fc FC2{} Fs:1}



static void Test_Uc_Sf_BFu1s()
{
  {
    init_simple_test("Uc_Sf_BFu1s");
    static STRUCT_IF_C Uc_Sf_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu1s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "Uc_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu1s, Uc_Sf_BFu1s)
//============================================================================


struct  Uc_Sf_BFu31i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Uc_Sf_BFu31i) C1{ Fc FC2{} Fi:31}



static void Test_Uc_Sf_BFu31i()
{
  {
    init_simple_test("Uc_Sf_BFu31i");
    static STRUCT_IF_C Uc_Sf_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu31i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Uc_Sf_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Uc_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu31i, Uc_Sf_BFu31i)
//============================================================================


struct  Uc_Sf_BFu31ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Uc_Sf_BFu31ll) C1{ Fc FC2{} FL:31}



static void Test_Uc_Sf_BFu31ll()
{
  {
    init_simple_test("Uc_Sf_BFu31ll");
    static STRUCT_IF_C Uc_Sf_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "Uc_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "Uc_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu31ll, Uc_Sf_BFu31ll)
//============================================================================


struct  Uc_Sf_BFu32i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Uc_Sf_BFu32i) C1{ Fc FC2{} Fi:32}



static void Test_Uc_Sf_BFu32i()
{
  {
    init_simple_test("Uc_Sf_BFu32i");
    static STRUCT_IF_C Uc_Sf_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu32i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Uc_Sf_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Uc_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu32i, Uc_Sf_BFu32i)
//============================================================================


struct  Uc_Sf_BFu32ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Uc_Sf_BFu32ll) C1{ Fc FC2{} FL:32}



static void Test_Uc_Sf_BFu32ll()
{
  {
    init_simple_test("Uc_Sf_BFu32ll");
    static STRUCT_IF_C Uc_Sf_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "Uc_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "Uc_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu32ll, Uc_Sf_BFu32ll)
//============================================================================


struct  Uc_Sf_BFu33  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Uc_Sf_BFu33) C1{ Fc FC2{} FL:33}



static void Test_Uc_Sf_BFu33()
{
  {
    init_simple_test("Uc_Sf_BFu33");
    static STRUCT_IF_C Uc_Sf_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu33.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "Uc_Sf_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "Uc_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu33, Uc_Sf_BFu33)
//============================================================================


struct  Uc_Sf_BFu7c  {
  unsigned char v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Uc_Sf_BFu7c) C1{ Fc FC2{} Fc:7}



static void Test_Uc_Sf_BFu7c()
{
  {
    init_simple_test("Uc_Sf_BFu7c");
    static STRUCT_IF_C Uc_Sf_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu7c.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Uc_Sf_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu7c, Uc_Sf_BFu7c)
//============================================================================


struct  Uc_Sf_BFu7i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Uc_Sf_BFu7i) C1{ Fc FC2{} Fi:7}



static void Test_Uc_Sf_BFu7i()
{
  {
    init_simple_test("Uc_Sf_BFu7i");
    static STRUCT_IF_C Uc_Sf_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu7i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Uc_Sf_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu7i, Uc_Sf_BFu7i)
//============================================================================


struct  Uc_Sf_BFu7ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Uc_Sf_BFu7ll) C1{ Fc FC2{} FL:7}



static void Test_Uc_Sf_BFu7ll()
{
  {
    init_simple_test("Uc_Sf_BFu7ll");
    static STRUCT_IF_C Uc_Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Uc_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu7ll, Uc_Sf_BFu7ll)
//============================================================================


struct  Uc_Sf_BFu7s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Uc_Sf_BFu7s) C1{ Fc FC2{} Fs:7}



static void Test_Uc_Sf_BFu7s()
{
  {
    init_simple_test("Uc_Sf_BFu7s");
    static STRUCT_IF_C Uc_Sf_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu7s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "Uc_Sf_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "Uc_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu7s, Uc_Sf_BFu7s)
//============================================================================


struct  Uc_Sf_BFu8c  {
  unsigned char v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Uc_Sf_BFu8c) C1{ Fc FC2{} Fc:8}



static void Test_Uc_Sf_BFu8c()
{
  {
    init_simple_test("Uc_Sf_BFu8c");
    static STRUCT_IF_C Uc_Sf_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu8c.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Uc_Sf_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu8c, Uc_Sf_BFu8c)
//============================================================================


struct  Uc_Sf_BFu8i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Uc_Sf_BFu8i) C1{ Fc FC2{} Fi:8}



static void Test_Uc_Sf_BFu8i()
{
  {
    init_simple_test("Uc_Sf_BFu8i");
    static STRUCT_IF_C Uc_Sf_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu8i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Uc_Sf_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu8i, Uc_Sf_BFu8i)
//============================================================================


struct  Uc_Sf_BFu8ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Uc_Sf_BFu8ll) C1{ Fc FC2{} FL:8}



static void Test_Uc_Sf_BFu8ll()
{
  {
    init_simple_test("Uc_Sf_BFu8ll");
    static STRUCT_IF_C Uc_Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Uc_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu8ll, Uc_Sf_BFu8ll)
//============================================================================


struct  Uc_Sf_BFu8s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Uc_Sf_BFu8s) C1{ Fc FC2{} Fs:8}



static void Test_Uc_Sf_BFu8s()
{
  {
    init_simple_test("Uc_Sf_BFu8s");
    static STRUCT_IF_C Uc_Sf_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu8s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "Uc_Sf_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "Uc_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu8s, Uc_Sf_BFu8s)
//============================================================================


struct  Uc_Sf_BFu9i  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Uc_Sf_BFu9i) C1{ Fc FC2{} Fi:9}



static void Test_Uc_Sf_BFu9i()
{
  {
    init_simple_test("Uc_Sf_BFu9i");
    static STRUCT_IF_C Uc_Sf_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu9i.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Uc_Sf_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Uc_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu9i, Uc_Sf_BFu9i)
//============================================================================


struct  Uc_Sf_BFu9ll  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Uc_Sf_BFu9ll) C1{ Fc FC2{} FL:9}



static void Test_Uc_Sf_BFu9ll()
{
  {
    init_simple_test("Uc_Sf_BFu9ll");
    static STRUCT_IF_C Uc_Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "Uc_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "Uc_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu9ll, Uc_Sf_BFu9ll)
//============================================================================


struct  Uc_Sf_BFu9s  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Uc_Sf_BFu9s) C1{ Fc FC2{} Fs:9}



static void Test_Uc_Sf_BFu9s()
{
  {
    init_simple_test("Uc_Sf_BFu9s");
    static STRUCT_IF_C Uc_Sf_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Uc_Sf_BFu9s.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Uc_Sf_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Uc_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_BFu9s, Uc_Sf_BFu9s)
//============================================================================


struct  Uc_Sf_C  {
  unsigned char v1;
  struct empty v2;
  char v3;
};
//SIG(1 Uc_Sf_C) C1{ Fc FC2{} Fc}



static void Test_Uc_Sf_C()
{
  {
    init_simple_test("Uc_Sf_C");
    STRUCT_IF_C Uc_Sf_C lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_C)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_C)");
    check_field_offset(lv, v1, 0, "Uc_Sf_C.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_C.v2");
    check_field_offset(lv, v3, 1, "Uc_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_C, Uc_Sf_C)
//============================================================================


struct  Uc_Sf_D  {
  unsigned char v1;
  struct empty v2;
  double v3;
};
//SIG(1 Uc_Sf_D) C1{ Fc FC2{} FL}



static void Test_Uc_Sf_D()
{
  {
    init_simple_test("Uc_Sf_D");
    STRUCT_IF_C Uc_Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_D)");
    check_field_offset(lv, v1, 0, "Uc_Sf_D.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Uc_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_D, Uc_Sf_D)
//============================================================================


struct  Uc_Sf_F  {
  unsigned char v1;
  struct empty v2;
  float v3;
};
//SIG(1 Uc_Sf_F) C1{ Fc FC2{} Fi}



static void Test_Uc_Sf_F()
{
  {
    init_simple_test("Uc_Sf_F");
    STRUCT_IF_C Uc_Sf_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_F)");
    check_field_offset(lv, v1, 0, "Uc_Sf_F.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_F.v2");
    check_field_offset(lv, v3, 4, "Uc_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_F, Uc_Sf_F)
//============================================================================


struct  Uc_Sf_I  {
  unsigned char v1;
  struct empty v2;
  int v3;
};
//SIG(1 Uc_Sf_I) C1{ Fc FC2{} Fi}



static void Test_Uc_Sf_I()
{
  {
    init_simple_test("Uc_Sf_I");
    STRUCT_IF_C Uc_Sf_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_I)");
    check_field_offset(lv, v1, 0, "Uc_Sf_I.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_I.v2");
    check_field_offset(lv, v3, 4, "Uc_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_I, Uc_Sf_I)
//============================================================================


struct  Uc_Sf_Ip  {
  unsigned char v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Uc_Sf_Ip) C1{ Fc FC2{} Fp}



static void Test_Uc_Sf_Ip()
{
  {
    init_simple_test("Uc_Sf_Ip");
    STRUCT_IF_C Uc_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Ip.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Uc_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Ip, Uc_Sf_Ip)
//============================================================================


struct  Uc_Sf_L  {
  unsigned char v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Uc_Sf_L) C1{ Fc FC2{} FL}



static void Test_Uc_Sf_L()
{
  {
    init_simple_test("Uc_Sf_L");
    STRUCT_IF_C Uc_Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_L)");
    check_field_offset(lv, v1, 0, "Uc_Sf_L.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Uc_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_L, Uc_Sf_L)
//============================================================================


struct  Uc_Sf_S  {
  unsigned char v1;
  struct empty v2;
  short v3;
};
//SIG(1 Uc_Sf_S) C1{ Fc FC2{} Fs}



static void Test_Uc_Sf_S()
{
  {
    init_simple_test("Uc_Sf_S");
    STRUCT_IF_C Uc_Sf_S lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_S)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_S)");
    check_field_offset(lv, v1, 0, "Uc_Sf_S.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_S.v2");
    check_field_offset(lv, v3, 2, "Uc_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_S, Uc_Sf_S)
//============================================================================


struct  Uc_Sf_Sf  {
  unsigned char v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Uc_Sf_Sf) C1{ Fc FC2{} FC2}



static void Test_Uc_Sf_Sf()
{
  {
    init_simple_test("Uc_Sf_Sf");
    STRUCT_IF_C Uc_Sf_Sf lv;
    check2(sizeof(lv), 1, "sizeof(Uc_Sf_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Sf.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Sf.v2");
    check_field_offset(lv, v3, 1, "Uc_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Sf, Uc_Sf_Sf)
//============================================================================


struct  Uc_Sf_Uc  {
  unsigned char v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Uc_Sf_Uc) C1{ Fc FC2{} Fc}



static void Test_Uc_Sf_Uc()
{
  {
    init_simple_test("Uc_Sf_Uc");
    STRUCT_IF_C Uc_Sf_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Sf_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Uc.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Uc.v2");
    check_field_offset(lv, v3, 1, "Uc_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Uc, Uc_Sf_Uc)
//============================================================================


struct  Uc_Sf_Ui  {
  unsigned char v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Uc_Sf_Ui) C1{ Fc FC2{} Fi}



static void Test_Uc_Sf_Ui()
{
  {
    init_simple_test("Uc_Sf_Ui");
    STRUCT_IF_C Uc_Sf_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Ui.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Ui.v2");
    check_field_offset(lv, v3, 4, "Uc_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Ui, Uc_Sf_Ui)
//============================================================================


struct  Uc_Sf_Ul  {
  unsigned char v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Uc_Sf_Ul) C1{ Fc FC2{} FL}



static void Test_Uc_Sf_Ul()
{
  {
    init_simple_test("Uc_Sf_Ul");
    STRUCT_IF_C Uc_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Ul.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Uc_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Ul, Uc_Sf_Ul)
//============================================================================


struct  Uc_Sf_Us  {
  unsigned char v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Uc_Sf_Us) C1{ Fc FC2{} Fs}



static void Test_Uc_Sf_Us()
{
  {
    init_simple_test("Uc_Sf_Us");
    STRUCT_IF_C Uc_Sf_Us lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Sf_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Sf_Us)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Us.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Us.v2");
    check_field_offset(lv, v3, 2, "Uc_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Us, Uc_Sf_Us)
//============================================================================


struct  Uc_Sf_Vp  {
  unsigned char v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Uc_Sf_Vp) C1{ Fc FC2{} Fp}



static void Test_Uc_Sf_Vp()
{
  {
    init_simple_test("Uc_Sf_Vp");
    STRUCT_IF_C Uc_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Uc_Sf_Vp.v1");
    check_field_offset(lv, v2, 1, "Uc_Sf_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Uc_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Sf_Vp, Uc_Sf_Vp)
//============================================================================


struct  Uc_Uc_Sf  {
  unsigned char v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Uc_Uc_Sf) C1{ Fc[2] FC2{}}



static void Test_Uc_Uc_Sf()
{
  {
    init_simple_test("Uc_Uc_Sf");
    STRUCT_IF_C Uc_Uc_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Uc_Sf)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Uc_Sf.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_Sf.v2");
    check_field_offset(lv, v3, 2, "Uc_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Uc_Sf, Uc_Uc_Sf)
//============================================================================


struct  Uc_Ui_Sf  {
  unsigned char v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Uc_Ui_Sf) C1{ Fc Fi FC2{}}



static void Test_Uc_Ui_Sf()
{
  {
    init_simple_test("Uc_Ui_Sf");
    STRUCT_IF_C Uc_Ui_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Ui_Sf.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_Sf.v2");
    check_field_offset(lv, v3, 8, "Uc_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ui_Sf, Uc_Ui_Sf)
//============================================================================


struct  Uc_Ul_Sf  {
  unsigned char v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Uc_Ul_Sf) C1{ Fc FL FC2{}}



static void Test_Uc_Ul_Sf()
{
  {
    init_simple_test("Uc_Ul_Sf");
    STRUCT_IF_C Uc_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Ul_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Uc_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ul_Sf, Uc_Ul_Sf)
//============================================================================


struct  Uc_Us_Sf  {
  unsigned char v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Uc_Us_Sf) C1{ Fc Fs FC2{}}



static void Test_Uc_Us_Sf()
{
  {
    init_simple_test("Uc_Us_Sf");
    STRUCT_IF_C Uc_Us_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Us_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Us_Sf.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_Sf.v2");
    check_field_offset(lv, v3, 4, "Uc_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Us_Sf, Uc_Us_Sf)
//============================================================================


struct  Uc_Vp_Sf  {
  unsigned char v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Uc_Vp_Sf) C1{ Fc Fp FC2{}}



static void Test_Uc_Vp_Sf()
{
  {
    init_simple_test("Uc_Vp_Sf");
    STRUCT_IF_C Uc_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Uc_Vp_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Uc_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Vp_Sf, Uc_Vp_Sf)
//============================================================================


struct  Ui_BFu15i_Sf  {
  unsigned int v1;
  unsigned int v2:15;
  struct empty v3;
};
//SIG(1 Ui_BFu15i_Sf) C1{ Fi Fi:15 FC2{}}



static void Test_Ui_BFu15i_Sf()
{
  {
    init_simple_test("Ui_BFu15i_Sf");
    static STRUCT_IF_C Ui_BFu15i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu15i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15i_Sf, Ui_BFu15i_Sf)
//============================================================================


struct  Ui_BFu15ll_Sf  {
  unsigned int v1;
  __tsu64 v2:15;
  struct empty v3;
};
//SIG(1 Ui_BFu15ll_Sf) C1{ Fi FL:15 FC2{}}



static void Test_Ui_BFu15ll_Sf()
{
  {
    init_simple_test("Ui_BFu15ll_Sf");
    static STRUCT_IF_C Ui_BFu15ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu15ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15ll_Sf, Ui_BFu15ll_Sf)
//============================================================================


struct  Ui_BFu15s_Sf  {
  unsigned int v1;
  unsigned short v2:15;
  struct empty v3;
};
//SIG(1 Ui_BFu15s_Sf) C1{ Fi Fs:15 FC2{}}



static void Test_Ui_BFu15s_Sf()
{
  {
    init_simple_test("Ui_BFu15s_Sf");
    static STRUCT_IF_C Ui_BFu15s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_Sf");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu15s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15s_Sf, Ui_BFu15s_Sf)
//============================================================================


struct  Ui_BFu16i_Sf  {
  unsigned int v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Ui_BFu16i_Sf) C1{ Fi Fi:16 FC2{}}



static void Test_Ui_BFu16i_Sf()
{
  {
    init_simple_test("Ui_BFu16i_Sf");
    static STRUCT_IF_C Ui_BFu16i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16i_Sf, Ui_BFu16i_Sf)
//============================================================================


struct  Ui_BFu16ll_Sf  {
  unsigned int v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Ui_BFu16ll_Sf) C1{ Fi FL:16 FC2{}}



static void Test_Ui_BFu16ll_Sf()
{
  {
    init_simple_test("Ui_BFu16ll_Sf");
    static STRUCT_IF_C Ui_BFu16ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16ll_Sf, Ui_BFu16ll_Sf)
//============================================================================


struct  Ui_BFu16s_Sf  {
  unsigned int v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Ui_BFu16s_Sf) C1{ Fi Fs:16 FC2{}}



static void Test_Ui_BFu16s_Sf()
{
  {
    init_simple_test("Ui_BFu16s_Sf");
    static STRUCT_IF_C Ui_BFu16s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_Sf");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16s_Sf, Ui_BFu16s_Sf)
//============================================================================


struct  Ui_BFu17i_Sf  {
  unsigned int v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Ui_BFu17i_Sf) C1{ Fi Fi:17 FC2{}}



static void Test_Ui_BFu17i_Sf()
{
  {
    init_simple_test("Ui_BFu17i_Sf");
    static STRUCT_IF_C Ui_BFu17i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_Sf");
    check_field_offset(lv, v3, 7, "Ui_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17i_Sf, Ui_BFu17i_Sf)
//============================================================================


struct  Ui_BFu17ll_Sf  {
  unsigned int v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Ui_BFu17ll_Sf) C1{ Fi FL:17 FC2{}}



static void Test_Ui_BFu17ll_Sf()
{
  {
    init_simple_test("Ui_BFu17ll_Sf");
    static STRUCT_IF_C Ui_BFu17ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_Sf");
    check_field_offset(lv, v3, 7, "Ui_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17ll_Sf, Ui_BFu17ll_Sf)
//============================================================================


struct  Ui_BFu1c_Sf  {
  unsigned int v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Ui_BFu1c_Sf) C1{ Fi Fc:1 FC2{}}



static void Test_Ui_BFu1c_Sf()
{
  {
    init_simple_test("Ui_BFu1c_Sf");
    static STRUCT_IF_C Ui_BFu1c_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1c_Sf, Ui_BFu1c_Sf)
//============================================================================


struct  Ui_BFu1i_Sf  {
  unsigned int v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Ui_BFu1i_Sf) C1{ Fi Fi:1 FC2{}}



static void Test_Ui_BFu1i_Sf()
{
  {
    init_simple_test("Ui_BFu1i_Sf");
    static STRUCT_IF_C Ui_BFu1i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1i_Sf, Ui_BFu1i_Sf)
//============================================================================


struct  Ui_BFu1ll_Sf  {
  unsigned int v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Ui_BFu1ll_Sf) C1{ Fi FL:1 FC2{}}



static void Test_Ui_BFu1ll_Sf()
{
  {
    init_simple_test("Ui_BFu1ll_Sf");
    static STRUCT_IF_C Ui_BFu1ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1ll_Sf, Ui_BFu1ll_Sf)
//============================================================================


struct  Ui_BFu1s_Sf  {
  unsigned int v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Ui_BFu1s_Sf) C1{ Fi Fs:1 FC2{}}



static void Test_Ui_BFu1s_Sf()
{
  {
    init_simple_test("Ui_BFu1s_Sf");
    static STRUCT_IF_C Ui_BFu1s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1s_Sf, Ui_BFu1s_Sf)
//============================================================================


struct  Ui_BFu31i_Sf  {
  unsigned int v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Ui_BFu31i_Sf) C1{ Fi Fi:31 FC2{}}



static void Test_Ui_BFu31i_Sf()
{
  {
    init_simple_test("Ui_BFu31i_Sf");
    static STRUCT_IF_C Ui_BFu31i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_Sf");
    check_field_offset(lv, v3, 8, "Ui_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31i_Sf, Ui_BFu31i_Sf)
//============================================================================


struct  Ui_BFu31ll_Sf  {
  unsigned int v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Ui_BFu31ll_Sf) C1{ Fi FL:31 FC2{}}



static void Test_Ui_BFu31ll_Sf()
{
  {
    init_simple_test("Ui_BFu31ll_Sf");
    static STRUCT_IF_C Ui_BFu31ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_Sf");
    check_field_offset(lv, v3, 8, "Ui_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31ll_Sf, Ui_BFu31ll_Sf)
//============================================================================


struct  Ui_BFu32i_Sf  {
  unsigned int v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Ui_BFu32i_Sf) C1{ Fi Fi:32 FC2{}}



static void Test_Ui_BFu32i_Sf()
{
  {
    init_simple_test("Ui_BFu32i_Sf");
    static STRUCT_IF_C Ui_BFu32i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_Sf");
    check_field_offset(lv, v3, 8, "Ui_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32i_Sf, Ui_BFu32i_Sf)
//============================================================================


struct  Ui_BFu32ll_Sf  {
  unsigned int v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Ui_BFu32ll_Sf) C1{ Fi FL:32 FC2{}}



static void Test_Ui_BFu32ll_Sf()
{
  {
    init_simple_test("Ui_BFu32ll_Sf");
    static STRUCT_IF_C Ui_BFu32ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_Sf");
    check_field_offset(lv, v3, 8, "Ui_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32ll_Sf, Ui_BFu32ll_Sf)
//============================================================================


struct  Ui_BFu33_Sf  {
  unsigned int v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Ui_BFu33_Sf) C1{ Fi FL:33 FC2{}}



static void Test_Ui_BFu33_Sf()
{
  {
    init_simple_test("Ui_BFu33_Sf");
    static STRUCT_IF_C Ui_BFu33_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_Sf");
    check_field_offset(lv, v3, ABISELECT(13,9), "Ui_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu33_Sf, Ui_BFu33_Sf)
//============================================================================


struct  Ui_BFu7c_Sf  {
  unsigned int v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Ui_BFu7c_Sf) C1{ Fi Fc:7 FC2{}}



static void Test_Ui_BFu7c_Sf()
{
  {
    init_simple_test("Ui_BFu7c_Sf");
    static STRUCT_IF_C Ui_BFu7c_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_Sf");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7c_Sf, Ui_BFu7c_Sf)
//============================================================================


struct  Ui_BFu7i_Sf  {
  unsigned int v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Ui_BFu7i_Sf) C1{ Fi Fi:7 FC2{}}



static void Test_Ui_BFu7i_Sf()
{
  {
    init_simple_test("Ui_BFu7i_Sf");
    static STRUCT_IF_C Ui_BFu7i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7i_Sf, Ui_BFu7i_Sf)
//============================================================================


struct  Ui_BFu7ll_Sf  {
  unsigned int v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Ui_BFu7ll_Sf) C1{ Fi FL:7 FC2{}}



static void Test_Ui_BFu7ll_Sf()
{
  {
    init_simple_test("Ui_BFu7ll_Sf");
    static STRUCT_IF_C Ui_BFu7ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7ll_Sf, Ui_BFu7ll_Sf)
//============================================================================


struct  Ui_BFu7s_Sf  {
  unsigned int v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Ui_BFu7s_Sf) C1{ Fi Fs:7 FC2{}}



static void Test_Ui_BFu7s_Sf()
{
  {
    init_simple_test("Ui_BFu7s_Sf");
    static STRUCT_IF_C Ui_BFu7s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_Sf");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7s_Sf, Ui_BFu7s_Sf)
//============================================================================


struct  Ui_BFu8c_Sf  {
  unsigned int v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Ui_BFu8c_Sf) C1{ Fi Fc:8 FC2{}}



static void Test_Ui_BFu8c_Sf()
{
  {
    init_simple_test("Ui_BFu8c_Sf");
    static STRUCT_IF_C Ui_BFu8c_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_Sf");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8c_Sf, Ui_BFu8c_Sf)
//============================================================================


struct  Ui_BFu8i_Sf  {
  unsigned int v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Ui_BFu8i_Sf) C1{ Fi Fi:8 FC2{}}



static void Test_Ui_BFu8i_Sf()
{
  {
    init_simple_test("Ui_BFu8i_Sf");
    static STRUCT_IF_C Ui_BFu8i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8i_Sf, Ui_BFu8i_Sf)
//============================================================================


struct  Ui_BFu8ll_Sf  {
  unsigned int v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Ui_BFu8ll_Sf) C1{ Fi FL:8 FC2{}}



static void Test_Ui_BFu8ll_Sf()
{
  {
    init_simple_test("Ui_BFu8ll_Sf");
    static STRUCT_IF_C Ui_BFu8ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8ll_Sf, Ui_BFu8ll_Sf)
//============================================================================


struct  Ui_BFu8s_Sf  {
  unsigned int v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Ui_BFu8s_Sf) C1{ Fi Fs:8 FC2{}}



static void Test_Ui_BFu8s_Sf()
{
  {
    init_simple_test("Ui_BFu8s_Sf");
    static STRUCT_IF_C Ui_BFu8s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_Sf");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_Sf");
    check_field_offset(lv, v3, 5, "Ui_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8s_Sf, Ui_BFu8s_Sf)
//============================================================================


struct  Ui_BFu9i_Sf  {
  unsigned int v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Ui_BFu9i_Sf) C1{ Fi Fi:9 FC2{}}



static void Test_Ui_BFu9i_Sf()
{
  {
    init_simple_test("Ui_BFu9i_Sf");
    static STRUCT_IF_C Ui_BFu9i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9i_Sf, Ui_BFu9i_Sf)
//============================================================================


struct  Ui_BFu9ll_Sf  {
  unsigned int v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Ui_BFu9ll_Sf) C1{ Fi FL:9 FC2{}}



static void Test_Ui_BFu9ll_Sf()
{
  {
    init_simple_test("Ui_BFu9ll_Sf");
    static STRUCT_IF_C Ui_BFu9ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9ll_Sf, Ui_BFu9ll_Sf)
//============================================================================


struct  Ui_BFu9s_Sf  {
  unsigned int v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Ui_BFu9s_Sf) C1{ Fi Fs:9 FC2{}}



static void Test_Ui_BFu9s_Sf()
{
  {
    init_simple_test("Ui_BFu9s_Sf");
    static STRUCT_IF_C Ui_BFu9s_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_Sf");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_Sf");
    check_field_offset(lv, v3, 6, "Ui_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9s_Sf, Ui_BFu9s_Sf)
//============================================================================


struct  Ui_C_Sf  {
  unsigned int v1;
  char v2;
  struct empty v3;
};
//SIG(1 Ui_C_Sf) C1{ Fi Fc FC2{}}



static void Test_Ui_C_Sf()
{
  {
    init_simple_test("Ui_C_Sf");
    STRUCT_IF_C Ui_C_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_Sf)");
    check_field_offset(lv, v1, 0, "Ui_C_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_C_Sf.v2");
    check_field_offset(lv, v3, 5, "Ui_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_C_Sf, Ui_C_Sf)
//============================================================================


struct  Ui_D_Sf  {
  unsigned int v1;
  double v2;
  struct empty v3;
};
//SIG(1 Ui_D_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_D_Sf()
{
  {
    init_simple_test("Ui_D_Sf");
    STRUCT_IF_C Ui_D_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_Sf)");
    check_field_offset(lv, v1, 0, "Ui_D_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ui_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_D_Sf, Ui_D_Sf)
//============================================================================


struct  Ui_F_Sf  {
  unsigned int v1;
  float v2;
  struct empty v3;
};
//SIG(1 Ui_F_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_F_Sf()
{
  {
    init_simple_test("Ui_F_Sf");
    STRUCT_IF_C Ui_F_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_Sf)");
    check_field_offset(lv, v1, 0, "Ui_F_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_F_Sf.v2");
    check_field_offset(lv, v3, 8, "Ui_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_F_Sf, Ui_F_Sf)
//============================================================================


struct  Ui_I_Sf  {
  unsigned int v1;
  int v2;
  struct empty v3;
};
//SIG(1 Ui_I_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_I_Sf()
{
  {
    init_simple_test("Ui_I_Sf");
    STRUCT_IF_C Ui_I_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_Sf)");
    check_field_offset(lv, v1, 0, "Ui_I_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_I_Sf.v2");
    check_field_offset(lv, v3, 8, "Ui_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_I_Sf, Ui_I_Sf)
//============================================================================


struct  Ui_Ip_Sf  {
  unsigned int v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Ui_Ip_Sf) C1{ Fi Fp FC2{}}



static void Test_Ui_Ip_Sf()
{
  {
    init_simple_test("Ui_Ip_Sf");
    STRUCT_IF_C Ui_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Ip_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ui_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ip_Sf, Ui_Ip_Sf)
//============================================================================


struct  Ui_L_Sf  {
  unsigned int v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Ui_L_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_L_Sf()
{
  {
    init_simple_test("Ui_L_Sf");
    STRUCT_IF_C Ui_L_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_Sf)");
    check_field_offset(lv, v1, 0, "Ui_L_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ui_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_L_Sf, Ui_L_Sf)
//============================================================================


struct  Ui_S_Sf  {
  unsigned int v1;
  short v2;
  struct empty v3;
};
//SIG(1 Ui_S_Sf) C1{ Fi Fs FC2{}}



static void Test_Ui_S_Sf()
{
  {
    init_simple_test("Ui_S_Sf");
    STRUCT_IF_C Ui_S_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_Sf)");
    check_field_offset(lv, v1, 0, "Ui_S_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_S_Sf.v2");
    check_field_offset(lv, v3, 6, "Ui_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_S_Sf, Ui_S_Sf)
//============================================================================


struct  Ui_Sf  {
  unsigned int v1;
  struct empty v2;
};
//SIG(1 Ui_Sf) C1{ Fi FC2{}}



static void Test_Ui_Sf()
{
  {
    init_simple_test("Ui_Sf");
    STRUCT_IF_C Ui_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Ui_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf, Ui_Sf)
//============================================================================


struct  Ui_Sf_BFu15i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Ui_Sf_BFu15i) C1{ Fi FC2{} Fi:15}



static void Test_Ui_Sf_BFu15i()
{
  {
    init_simple_test("Ui_Sf_BFu15i");
    static STRUCT_IF_C Ui_Sf_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu15i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Ui_Sf_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu15i, Ui_Sf_BFu15i)
//============================================================================


struct  Ui_Sf_BFu15ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Ui_Sf_BFu15ll) C1{ Fi FC2{} FL:15}



static void Test_Ui_Sf_BFu15ll()
{
  {
    init_simple_test("Ui_Sf_BFu15ll");
    static STRUCT_IF_C Ui_Sf_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Ui_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu15ll, Ui_Sf_BFu15ll)
//============================================================================


struct  Ui_Sf_BFu15s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Ui_Sf_BFu15s) C1{ Fi FC2{} Fs:15}



static void Test_Ui_Sf_BFu15s()
{
  {
    init_simple_test("Ui_Sf_BFu15s");
    static STRUCT_IF_C Ui_Sf_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu15s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "Ui_Sf_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "Ui_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu15s, Ui_Sf_BFu15s)
//============================================================================


struct  Ui_Sf_BFu16i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Ui_Sf_BFu16i) C1{ Fi FC2{} Fi:16}



static void Test_Ui_Sf_BFu16i()
{
  {
    init_simple_test("Ui_Sf_BFu16i");
    static STRUCT_IF_C Ui_Sf_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu16i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Ui_Sf_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu16i, Ui_Sf_BFu16i)
//============================================================================


struct  Ui_Sf_BFu16ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Ui_Sf_BFu16ll) C1{ Fi FC2{} FL:16}



static void Test_Ui_Sf_BFu16ll()
{
  {
    init_simple_test("Ui_Sf_BFu16ll");
    static STRUCT_IF_C Ui_Sf_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Ui_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu16ll, Ui_Sf_BFu16ll)
//============================================================================


struct  Ui_Sf_BFu16s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Ui_Sf_BFu16s) C1{ Fi FC2{} Fs:16}



static void Test_Ui_Sf_BFu16s()
{
  {
    init_simple_test("Ui_Sf_BFu16s");
    static STRUCT_IF_C Ui_Sf_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu16s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "Ui_Sf_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "Ui_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu16s, Ui_Sf_BFu16s)
//============================================================================


struct  Ui_Sf_BFu17i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Ui_Sf_BFu17i) C1{ Fi FC2{} Fi:17}



static void Test_Ui_Sf_BFu17i()
{
  {
    init_simple_test("Ui_Sf_BFu17i");
    static STRUCT_IF_C Ui_Sf_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu17i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Ui_Sf_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Ui_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu17i, Ui_Sf_BFu17i)
//============================================================================


struct  Ui_Sf_BFu17ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Ui_Sf_BFu17ll) C1{ Fi FC2{} FL:17}



static void Test_Ui_Sf_BFu17ll()
{
  {
    init_simple_test("Ui_Sf_BFu17ll");
    static STRUCT_IF_C Ui_Sf_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Ui_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Ui_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu17ll, Ui_Sf_BFu17ll)
//============================================================================


struct  Ui_Sf_BFu1c  {
  unsigned int v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Ui_Sf_BFu1c) C1{ Fi FC2{} Fc:1}



static void Test_Ui_Sf_BFu1c()
{
  {
    init_simple_test("Ui_Sf_BFu1c");
    static STRUCT_IF_C Ui_Sf_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu1c.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Ui_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu1c, Ui_Sf_BFu1c)
//============================================================================


struct  Ui_Sf_BFu1i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Ui_Sf_BFu1i) C1{ Fi FC2{} Fi:1}



static void Test_Ui_Sf_BFu1i()
{
  {
    init_simple_test("Ui_Sf_BFu1i");
    static STRUCT_IF_C Ui_Sf_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu1i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Ui_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu1i, Ui_Sf_BFu1i)
//============================================================================


struct  Ui_Sf_BFu1ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Ui_Sf_BFu1ll) C1{ Fi FC2{} FL:1}



static void Test_Ui_Sf_BFu1ll()
{
  {
    init_simple_test("Ui_Sf_BFu1ll");
    static STRUCT_IF_C Ui_Sf_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Ui_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu1ll, Ui_Sf_BFu1ll)
//============================================================================


struct  Ui_Sf_BFu1s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Ui_Sf_BFu1s) C1{ Fi FC2{} Fs:1}



static void Test_Ui_Sf_BFu1s()
{
  {
    init_simple_test("Ui_Sf_BFu1s");
    static STRUCT_IF_C Ui_Sf_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu1s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "Ui_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu1s, Ui_Sf_BFu1s)
//============================================================================


struct  Ui_Sf_BFu31i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Ui_Sf_BFu31i) C1{ Fi FC2{} Fi:31}



static void Test_Ui_Sf_BFu31i()
{
  {
    init_simple_test("Ui_Sf_BFu31i");
    static STRUCT_IF_C Ui_Sf_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu31i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Ui_Sf_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Ui_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu31i, Ui_Sf_BFu31i)
//============================================================================


struct  Ui_Sf_BFu31ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Ui_Sf_BFu31ll) C1{ Fi FC2{} FL:31}



static void Test_Ui_Sf_BFu31ll()
{
  {
    init_simple_test("Ui_Sf_BFu31ll");
    static STRUCT_IF_C Ui_Sf_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Ui_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Ui_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu31ll, Ui_Sf_BFu31ll)
//============================================================================


struct  Ui_Sf_BFu32i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Ui_Sf_BFu32i) C1{ Fi FC2{} Fi:32}



static void Test_Ui_Sf_BFu32i()
{
  {
    init_simple_test("Ui_Sf_BFu32i");
    static STRUCT_IF_C Ui_Sf_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu32i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Ui_Sf_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Ui_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu32i, Ui_Sf_BFu32i)
//============================================================================


struct  Ui_Sf_BFu32ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Ui_Sf_BFu32ll) C1{ Fi FC2{} FL:32}



static void Test_Ui_Sf_BFu32ll()
{
  {
    init_simple_test("Ui_Sf_BFu32ll");
    static STRUCT_IF_C Ui_Sf_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Ui_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Ui_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu32ll, Ui_Sf_BFu32ll)
//============================================================================


struct  Ui_Sf_BFu33  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Ui_Sf_BFu33) C1{ Fi FC2{} FL:33}



static void Test_Ui_Sf_BFu33()
{
  {
    init_simple_test("Ui_Sf_BFu33");
    static STRUCT_IF_C Ui_Sf_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu33.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Ui_Sf_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu33, Ui_Sf_BFu33)
//============================================================================


struct  Ui_Sf_BFu7c  {
  unsigned int v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Ui_Sf_BFu7c) C1{ Fi FC2{} Fc:7}



static void Test_Ui_Sf_BFu7c()
{
  {
    init_simple_test("Ui_Sf_BFu7c");
    static STRUCT_IF_C Ui_Sf_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu7c.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Ui_Sf_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu7c, Ui_Sf_BFu7c)
//============================================================================


struct  Ui_Sf_BFu7i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Ui_Sf_BFu7i) C1{ Fi FC2{} Fi:7}



static void Test_Ui_Sf_BFu7i()
{
  {
    init_simple_test("Ui_Sf_BFu7i");
    static STRUCT_IF_C Ui_Sf_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu7i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Ui_Sf_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu7i, Ui_Sf_BFu7i)
//============================================================================


struct  Ui_Sf_BFu7ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Ui_Sf_BFu7ll) C1{ Fi FC2{} FL:7}



static void Test_Ui_Sf_BFu7ll()
{
  {
    init_simple_test("Ui_Sf_BFu7ll");
    static STRUCT_IF_C Ui_Sf_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Ui_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu7ll, Ui_Sf_BFu7ll)
//============================================================================


struct  Ui_Sf_BFu7s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Ui_Sf_BFu7s) C1{ Fi FC2{} Fs:7}



static void Test_Ui_Sf_BFu7s()
{
  {
    init_simple_test("Ui_Sf_BFu7s");
    static STRUCT_IF_C Ui_Sf_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu7s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "Ui_Sf_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "Ui_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu7s, Ui_Sf_BFu7s)
//============================================================================


struct  Ui_Sf_BFu8c  {
  unsigned int v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Ui_Sf_BFu8c) C1{ Fi FC2{} Fc:8}



static void Test_Ui_Sf_BFu8c()
{
  {
    init_simple_test("Ui_Sf_BFu8c");
    static STRUCT_IF_C Ui_Sf_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu8c.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Ui_Sf_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu8c, Ui_Sf_BFu8c)
//============================================================================


struct  Ui_Sf_BFu8i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Ui_Sf_BFu8i) C1{ Fi FC2{} Fi:8}



static void Test_Ui_Sf_BFu8i()
{
  {
    init_simple_test("Ui_Sf_BFu8i");
    static STRUCT_IF_C Ui_Sf_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu8i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Ui_Sf_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu8i, Ui_Sf_BFu8i)
//============================================================================


struct  Ui_Sf_BFu8ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Ui_Sf_BFu8ll) C1{ Fi FC2{} FL:8}



static void Test_Ui_Sf_BFu8ll()
{
  {
    init_simple_test("Ui_Sf_BFu8ll");
    static STRUCT_IF_C Ui_Sf_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Ui_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu8ll, Ui_Sf_BFu8ll)
//============================================================================


struct  Ui_Sf_BFu8s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Ui_Sf_BFu8s) C1{ Fi FC2{} Fs:8}



static void Test_Ui_Sf_BFu8s()
{
  {
    init_simple_test("Ui_Sf_BFu8s");
    static STRUCT_IF_C Ui_Sf_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu8s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "Ui_Sf_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "Ui_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu8s, Ui_Sf_BFu8s)
//============================================================================


struct  Ui_Sf_BFu9i  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Ui_Sf_BFu9i) C1{ Fi FC2{} Fi:9}



static void Test_Ui_Sf_BFu9i()
{
  {
    init_simple_test("Ui_Sf_BFu9i");
    static STRUCT_IF_C Ui_Sf_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu9i.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Ui_Sf_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu9i, Ui_Sf_BFu9i)
//============================================================================


struct  Ui_Sf_BFu9ll  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Ui_Sf_BFu9ll) C1{ Fi FC2{} FL:9}



static void Test_Ui_Sf_BFu9ll()
{
  {
    init_simple_test("Ui_Sf_BFu9ll");
    static STRUCT_IF_C Ui_Sf_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Ui_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu9ll, Ui_Sf_BFu9ll)
//============================================================================


struct  Ui_Sf_BFu9s  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Ui_Sf_BFu9s) C1{ Fi FC2{} Fs:9}



static void Test_Ui_Sf_BFu9s()
{
  {
    init_simple_test("Ui_Sf_BFu9s");
    static STRUCT_IF_C Ui_Sf_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_Sf_BFu9s.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "Ui_Sf_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "Ui_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_BFu9s, Ui_Sf_BFu9s)
//============================================================================


struct  Ui_Sf_C  {
  unsigned int v1;
  struct empty v2;
  char v3;
};
//SIG(1 Ui_Sf_C) C1{ Fi FC2{} Fc}



static void Test_Ui_Sf_C()
{
  {
    init_simple_test("Ui_Sf_C");
    STRUCT_IF_C Ui_Sf_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_C)");
    check_field_offset(lv, v1, 0, "Ui_Sf_C.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_C.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_C, Ui_Sf_C)
//============================================================================


struct  Ui_Sf_D  {
  unsigned int v1;
  struct empty v2;
  double v3;
};
//SIG(1 Ui_Sf_D) C1{ Fi FC2{} FL}



static void Test_Ui_Sf_D()
{
  {
    init_simple_test("Ui_Sf_D");
    STRUCT_IF_C Ui_Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_D)");
    check_field_offset(lv, v1, 0, "Ui_Sf_D.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Ui_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_D, Ui_Sf_D)
//============================================================================


struct  Ui_Sf_F  {
  unsigned int v1;
  struct empty v2;
  float v3;
};
//SIG(1 Ui_Sf_F) C1{ Fi FC2{} Fi}



static void Test_Ui_Sf_F()
{
  {
    init_simple_test("Ui_Sf_F");
    STRUCT_IF_C Ui_Sf_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_F)");
    check_field_offset(lv, v1, 0, "Ui_Sf_F.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_F.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_F, Ui_Sf_F)
//============================================================================


struct  Ui_Sf_I  {
  unsigned int v1;
  struct empty v2;
  int v3;
};
//SIG(1 Ui_Sf_I) C1{ Fi FC2{} Fi}



static void Test_Ui_Sf_I()
{
  {
    init_simple_test("Ui_Sf_I");
    STRUCT_IF_C Ui_Sf_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_I)");
    check_field_offset(lv, v1, 0, "Ui_Sf_I.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_I.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_I, Ui_Sf_I)
//============================================================================


struct  Ui_Sf_Ip  {
  unsigned int v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Ui_Sf_Ip) C1{ Fi FC2{} Fp}



static void Test_Ui_Sf_Ip()
{
  {
    init_simple_test("Ui_Sf_Ip");
    STRUCT_IF_C Ui_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Ip.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Ui_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Ip, Ui_Sf_Ip)
//============================================================================


struct  Ui_Sf_L  {
  unsigned int v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Ui_Sf_L) C1{ Fi FC2{} FL}



static void Test_Ui_Sf_L()
{
  {
    init_simple_test("Ui_Sf_L");
    STRUCT_IF_C Ui_Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_L)");
    check_field_offset(lv, v1, 0, "Ui_Sf_L.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Ui_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_L, Ui_Sf_L)
//============================================================================


struct  Ui_Sf_S  {
  unsigned int v1;
  struct empty v2;
  short v3;
};
//SIG(1 Ui_Sf_S) C1{ Fi FC2{} Fs}



static void Test_Ui_Sf_S()
{
  {
    init_simple_test("Ui_Sf_S");
    STRUCT_IF_C Ui_Sf_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_S)");
    check_field_offset(lv, v1, 0, "Ui_Sf_S.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_S.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_S, Ui_Sf_S)
//============================================================================


struct  Ui_Sf_Sf  {
  unsigned int v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Ui_Sf_Sf) C1{ Fi FC2{} FC2}



static void Test_Ui_Sf_Sf()
{
  {
    init_simple_test("Ui_Sf_Sf");
    STRUCT_IF_C Ui_Sf_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Ui_Sf_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Sf.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Sf, Ui_Sf_Sf)
//============================================================================


struct  Ui_Sf_Uc  {
  unsigned int v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Ui_Sf_Uc) C1{ Fi FC2{} Fc}



static void Test_Ui_Sf_Uc()
{
  {
    init_simple_test("Ui_Sf_Uc");
    STRUCT_IF_C Ui_Sf_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Uc.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Uc, Ui_Sf_Uc)
//============================================================================


struct  Ui_Sf_Ui  {
  unsigned int v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Ui_Sf_Ui) C1{ Fi FC2{} Fi}



static void Test_Ui_Sf_Ui()
{
  {
    init_simple_test("Ui_Sf_Ui");
    STRUCT_IF_C Ui_Sf_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Ui.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Ui, Ui_Sf_Ui)
//============================================================================


struct  Ui_Sf_Ul  {
  unsigned int v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Ui_Sf_Ul) C1{ Fi FC2{} FL}



static void Test_Ui_Sf_Ul()
{
  {
    init_simple_test("Ui_Sf_Ul");
    STRUCT_IF_C Ui_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Ul.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Ui_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Ul, Ui_Sf_Ul)
//============================================================================


struct  Ui_Sf_Us  {
  unsigned int v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Ui_Sf_Us) C1{ Fi FC2{} Fs}



static void Test_Ui_Sf_Us()
{
  {
    init_simple_test("Ui_Sf_Us");
    STRUCT_IF_C Ui_Sf_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Sf_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Sf_Us)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Us.v2");
    check_field_offset(lv, v3, 4, "Ui_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Us, Ui_Sf_Us)
//============================================================================


struct  Ui_Sf_Vp  {
  unsigned int v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Ui_Sf_Vp) C1{ Fi FC2{} Fp}



static void Test_Ui_Sf_Vp()
{
  {
    init_simple_test("Ui_Sf_Vp");
    STRUCT_IF_C Ui_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Ui_Sf_Vp.v1");
    check_field_offset(lv, v2, 4, "Ui_Sf_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Ui_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Sf_Vp, Ui_Sf_Vp)
//============================================================================


struct  Ui_Uc_Sf  {
  unsigned int v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Ui_Uc_Sf) C1{ Fi Fc FC2{}}



static void Test_Ui_Uc_Sf()
{
  {
    init_simple_test("Ui_Uc_Sf");
    STRUCT_IF_C Ui_Uc_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Uc_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_Sf.v2");
    check_field_offset(lv, v3, 5, "Ui_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Uc_Sf, Ui_Uc_Sf)
//============================================================================


struct  Ui_Ui_Sf  {
  unsigned int v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Ui_Ui_Sf) C1{ Fi[2] FC2{}}



static void Test_Ui_Ui_Sf()
{
  {
    init_simple_test("Ui_Ui_Sf");
    STRUCT_IF_C Ui_Ui_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Ui_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_Sf.v2");
    check_field_offset(lv, v3, 8, "Ui_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ui_Sf, Ui_Ui_Sf)
//============================================================================


struct  Ui_Ul_Sf  {
  unsigned int v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Ui_Ul_Sf) C1{ Fi FL FC2{}}



static void Test_Ui_Ul_Sf()
{
  {
    init_simple_test("Ui_Ul_Sf");
    STRUCT_IF_C Ui_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Ul_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ui_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ul_Sf, Ui_Ul_Sf)
//============================================================================


struct  Ui_Us_Sf  {
  unsigned int v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Ui_Us_Sf) C1{ Fi Fs FC2{}}



static void Test_Ui_Us_Sf()
{
  {
    init_simple_test("Ui_Us_Sf");
    STRUCT_IF_C Ui_Us_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Us_Sf.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_Sf.v2");
    check_field_offset(lv, v3, 6, "Ui_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Us_Sf, Ui_Us_Sf)
//============================================================================


struct  Ui_Vp_Sf  {
  unsigned int v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Ui_Vp_Sf) C1{ Fi Fp FC2{}}



static void Test_Ui_Vp_Sf()
{
  {
    init_simple_test("Ui_Vp_Sf");
    STRUCT_IF_C Ui_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Ui_Vp_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Ui_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Vp_Sf, Ui_Vp_Sf)
//============================================================================


struct  Ul_BFu15i_Sf  {
  __tsu64 v1;
  unsigned int v2:15;
  struct empty v3;
};
//SIG(1 Ul_BFu15i_Sf) C1{ FL Fi:15 FC2{}}



static void Test_Ul_BFu15i_Sf()
{
  {
    init_simple_test("Ul_BFu15i_Sf");
    static STRUCT_IF_C Ul_BFu15i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu15i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15i_Sf, Ul_BFu15i_Sf)
//============================================================================


struct  Ul_BFu15ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:15;
  struct empty v3;
};
//SIG(1 Ul_BFu15ll_Sf) C1{ FL FL:15 FC2{}}



static void Test_Ul_BFu15ll_Sf()
{
  {
    init_simple_test("Ul_BFu15ll_Sf");
    static STRUCT_IF_C Ul_BFu15ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu15ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15ll_Sf, Ul_BFu15ll_Sf)
//============================================================================


struct  Ul_BFu15s_Sf  {
  __tsu64 v1;
  unsigned short v2:15;
  struct empty v3;
};
//SIG(1 Ul_BFu15s_Sf) C1{ FL Fs:15 FC2{}}



static void Test_Ul_BFu15s_Sf()
{
  {
    init_simple_test("Ul_BFu15s_Sf");
    static STRUCT_IF_C Ul_BFu15s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_Sf");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu15s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15s_Sf, Ul_BFu15s_Sf)
//============================================================================


struct  Ul_BFu16i_Sf  {
  __tsu64 v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Ul_BFu16i_Sf) C1{ FL Fi:16 FC2{}}



static void Test_Ul_BFu16i_Sf()
{
  {
    init_simple_test("Ul_BFu16i_Sf");
    static STRUCT_IF_C Ul_BFu16i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16i_Sf, Ul_BFu16i_Sf)
//============================================================================


struct  Ul_BFu16ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Ul_BFu16ll_Sf) C1{ FL FL:16 FC2{}}



static void Test_Ul_BFu16ll_Sf()
{
  {
    init_simple_test("Ul_BFu16ll_Sf");
    static STRUCT_IF_C Ul_BFu16ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16ll_Sf, Ul_BFu16ll_Sf)
//============================================================================


struct  Ul_BFu16s_Sf  {
  __tsu64 v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Ul_BFu16s_Sf) C1{ FL Fs:16 FC2{}}



static void Test_Ul_BFu16s_Sf()
{
  {
    init_simple_test("Ul_BFu16s_Sf");
    static STRUCT_IF_C Ul_BFu16s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_Sf");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16s_Sf, Ul_BFu16s_Sf)
//============================================================================


struct  Ul_BFu17i_Sf  {
  __tsu64 v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Ul_BFu17i_Sf) C1{ FL Fi:17 FC2{}}



static void Test_Ul_BFu17i_Sf()
{
  {
    init_simple_test("Ul_BFu17i_Sf");
    static STRUCT_IF_C Ul_BFu17i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_Sf");
    check_field_offset(lv, v3, 11, "Ul_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17i_Sf, Ul_BFu17i_Sf)
//============================================================================


struct  Ul_BFu17ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Ul_BFu17ll_Sf) C1{ FL FL:17 FC2{}}



static void Test_Ul_BFu17ll_Sf()
{
  {
    init_simple_test("Ul_BFu17ll_Sf");
    static STRUCT_IF_C Ul_BFu17ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_Sf");
    check_field_offset(lv, v3, 11, "Ul_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17ll_Sf, Ul_BFu17ll_Sf)
//============================================================================


struct  Ul_BFu1c_Sf  {
  __tsu64 v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Ul_BFu1c_Sf) C1{ FL Fc:1 FC2{}}



static void Test_Ul_BFu1c_Sf()
{
  {
    init_simple_test("Ul_BFu1c_Sf");
    static STRUCT_IF_C Ul_BFu1c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1c_Sf, Ul_BFu1c_Sf)
//============================================================================


struct  Ul_BFu1i_Sf  {
  __tsu64 v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Ul_BFu1i_Sf) C1{ FL Fi:1 FC2{}}



static void Test_Ul_BFu1i_Sf()
{
  {
    init_simple_test("Ul_BFu1i_Sf");
    static STRUCT_IF_C Ul_BFu1i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1i_Sf, Ul_BFu1i_Sf)
//============================================================================


struct  Ul_BFu1ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Ul_BFu1ll_Sf) C1{ FL FL:1 FC2{}}



static void Test_Ul_BFu1ll_Sf()
{
  {
    init_simple_test("Ul_BFu1ll_Sf");
    static STRUCT_IF_C Ul_BFu1ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1ll_Sf, Ul_BFu1ll_Sf)
//============================================================================


struct  Ul_BFu1s_Sf  {
  __tsu64 v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Ul_BFu1s_Sf) C1{ FL Fs:1 FC2{}}



static void Test_Ul_BFu1s_Sf()
{
  {
    init_simple_test("Ul_BFu1s_Sf");
    static STRUCT_IF_C Ul_BFu1s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1s_Sf, Ul_BFu1s_Sf)
//============================================================================


struct  Ul_BFu31i_Sf  {
  __tsu64 v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Ul_BFu31i_Sf) C1{ FL Fi:31 FC2{}}



static void Test_Ul_BFu31i_Sf()
{
  {
    init_simple_test("Ul_BFu31i_Sf");
    static STRUCT_IF_C Ul_BFu31i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_Sf");
    check_field_offset(lv, v3, 12, "Ul_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31i_Sf, Ul_BFu31i_Sf)
//============================================================================


struct  Ul_BFu31ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Ul_BFu31ll_Sf) C1{ FL FL:31 FC2{}}



static void Test_Ul_BFu31ll_Sf()
{
  {
    init_simple_test("Ul_BFu31ll_Sf");
    static STRUCT_IF_C Ul_BFu31ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_Sf");
    check_field_offset(lv, v3, 12, "Ul_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31ll_Sf, Ul_BFu31ll_Sf)
//============================================================================


struct  Ul_BFu32i_Sf  {
  __tsu64 v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Ul_BFu32i_Sf) C1{ FL Fi:32 FC2{}}



static void Test_Ul_BFu32i_Sf()
{
  {
    init_simple_test("Ul_BFu32i_Sf");
    static STRUCT_IF_C Ul_BFu32i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_Sf");
    check_field_offset(lv, v3, 12, "Ul_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32i_Sf, Ul_BFu32i_Sf)
//============================================================================


struct  Ul_BFu32ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Ul_BFu32ll_Sf) C1{ FL FL:32 FC2{}}



static void Test_Ul_BFu32ll_Sf()
{
  {
    init_simple_test("Ul_BFu32ll_Sf");
    static STRUCT_IF_C Ul_BFu32ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_Sf");
    check_field_offset(lv, v3, 12, "Ul_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32ll_Sf, Ul_BFu32ll_Sf)
//============================================================================


struct  Ul_BFu33_Sf  {
  __tsu64 v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Ul_BFu33_Sf) C1{ FL FL:33 FC2{}}



static void Test_Ul_BFu33_Sf()
{
  {
    init_simple_test("Ul_BFu33_Sf");
    static STRUCT_IF_C Ul_BFu33_Sf lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_Sf");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_Sf");
    check_field_offset(lv, v3, 13, "Ul_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu33_Sf, Ul_BFu33_Sf)
//============================================================================


struct  Ul_BFu7c_Sf  {
  __tsu64 v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Ul_BFu7c_Sf) C1{ FL Fc:7 FC2{}}



static void Test_Ul_BFu7c_Sf()
{
  {
    init_simple_test("Ul_BFu7c_Sf");
    static STRUCT_IF_C Ul_BFu7c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_Sf");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7c_Sf, Ul_BFu7c_Sf)
//============================================================================


struct  Ul_BFu7i_Sf  {
  __tsu64 v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Ul_BFu7i_Sf) C1{ FL Fi:7 FC2{}}



static void Test_Ul_BFu7i_Sf()
{
  {
    init_simple_test("Ul_BFu7i_Sf");
    static STRUCT_IF_C Ul_BFu7i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7i_Sf, Ul_BFu7i_Sf)
//============================================================================


struct  Ul_BFu7ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Ul_BFu7ll_Sf) C1{ FL FL:7 FC2{}}



static void Test_Ul_BFu7ll_Sf()
{
  {
    init_simple_test("Ul_BFu7ll_Sf");
    static STRUCT_IF_C Ul_BFu7ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7ll_Sf, Ul_BFu7ll_Sf)
//============================================================================


struct  Ul_BFu7s_Sf  {
  __tsu64 v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Ul_BFu7s_Sf) C1{ FL Fs:7 FC2{}}



static void Test_Ul_BFu7s_Sf()
{
  {
    init_simple_test("Ul_BFu7s_Sf");
    static STRUCT_IF_C Ul_BFu7s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_Sf");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7s_Sf, Ul_BFu7s_Sf)
//============================================================================


struct  Ul_BFu8c_Sf  {
  __tsu64 v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Ul_BFu8c_Sf) C1{ FL Fc:8 FC2{}}



static void Test_Ul_BFu8c_Sf()
{
  {
    init_simple_test("Ul_BFu8c_Sf");
    static STRUCT_IF_C Ul_BFu8c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_Sf");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8c_Sf, Ul_BFu8c_Sf)
//============================================================================


struct  Ul_BFu8i_Sf  {
  __tsu64 v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Ul_BFu8i_Sf) C1{ FL Fi:8 FC2{}}



static void Test_Ul_BFu8i_Sf()
{
  {
    init_simple_test("Ul_BFu8i_Sf");
    static STRUCT_IF_C Ul_BFu8i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8i_Sf, Ul_BFu8i_Sf)
//============================================================================


struct  Ul_BFu8ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Ul_BFu8ll_Sf) C1{ FL FL:8 FC2{}}



static void Test_Ul_BFu8ll_Sf()
{
  {
    init_simple_test("Ul_BFu8ll_Sf");
    static STRUCT_IF_C Ul_BFu8ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8ll_Sf, Ul_BFu8ll_Sf)
//============================================================================


struct  Ul_BFu8s_Sf  {
  __tsu64 v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Ul_BFu8s_Sf) C1{ FL Fs:8 FC2{}}



static void Test_Ul_BFu8s_Sf()
{
  {
    init_simple_test("Ul_BFu8s_Sf");
    static STRUCT_IF_C Ul_BFu8s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_Sf");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_Sf");
    check_field_offset(lv, v3, 9, "Ul_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8s_Sf, Ul_BFu8s_Sf)
//============================================================================


struct  Ul_BFu9i_Sf  {
  __tsu64 v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Ul_BFu9i_Sf) C1{ FL Fi:9 FC2{}}



static void Test_Ul_BFu9i_Sf()
{
  {
    init_simple_test("Ul_BFu9i_Sf");
    static STRUCT_IF_C Ul_BFu9i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_Sf");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9i_Sf, Ul_BFu9i_Sf)
//============================================================================


struct  Ul_BFu9ll_Sf  {
  __tsu64 v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Ul_BFu9ll_Sf) C1{ FL FL:9 FC2{}}



static void Test_Ul_BFu9ll_Sf()
{
  {
    init_simple_test("Ul_BFu9ll_Sf");
    static STRUCT_IF_C Ul_BFu9ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9ll_Sf, Ul_BFu9ll_Sf)
//============================================================================


struct  Ul_BFu9s_Sf  {
  __tsu64 v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Ul_BFu9s_Sf) C1{ FL Fs:9 FC2{}}



static void Test_Ul_BFu9s_Sf()
{
  {
    init_simple_test("Ul_BFu9s_Sf");
    static STRUCT_IF_C Ul_BFu9s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_Sf");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_Sf");
    check_field_offset(lv, v3, 10, "Ul_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9s_Sf, Ul_BFu9s_Sf)
//============================================================================


struct  Ul_C_Sf  {
  __tsu64 v1;
  char v2;
  struct empty v3;
};
//SIG(1 Ul_C_Sf) C1{ FL Fc FC2{}}



static void Test_Ul_C_Sf()
{
  {
    init_simple_test("Ul_C_Sf");
    STRUCT_IF_C Ul_C_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_Sf)");
    check_field_offset(lv, v1, 0, "Ul_C_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_C_Sf.v2");
    check_field_offset(lv, v3, 9, "Ul_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_C_Sf, Ul_C_Sf)
//============================================================================


struct  Ul_D_Sf  {
  __tsu64 v1;
  double v2;
  struct empty v3;
};
//SIG(1 Ul_D_Sf) C1{ FL[2] FC2{}}



static void Test_Ul_D_Sf()
{
  {
    init_simple_test("Ul_D_Sf");
    STRUCT_IF_C Ul_D_Sf lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_Sf)");
    check_field_offset(lv, v1, 0, "Ul_D_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_D_Sf.v2");
    check_field_offset(lv, v3, 16, "Ul_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_D_Sf, Ul_D_Sf)
//============================================================================


struct  Ul_F_Sf  {
  __tsu64 v1;
  float v2;
  struct empty v3;
};
//SIG(1 Ul_F_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_F_Sf()
{
  {
    init_simple_test("Ul_F_Sf");
    STRUCT_IF_C Ul_F_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_Sf)");
    check_field_offset(lv, v1, 0, "Ul_F_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_F_Sf.v2");
    check_field_offset(lv, v3, 12, "Ul_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_F_Sf, Ul_F_Sf)
//============================================================================


struct  Ul_I_Sf  {
  __tsu64 v1;
  int v2;
  struct empty v3;
};
//SIG(1 Ul_I_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_I_Sf()
{
  {
    init_simple_test("Ul_I_Sf");
    STRUCT_IF_C Ul_I_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_Sf)");
    check_field_offset(lv, v1, 0, "Ul_I_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_I_Sf.v2");
    check_field_offset(lv, v3, 12, "Ul_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_I_Sf, Ul_I_Sf)
//============================================================================


struct  Ul_Ip_Sf  {
  __tsu64 v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Ul_Ip_Sf) C1{ FL Fp FC2{}}



static void Test_Ul_Ip_Sf()
{
  {
    init_simple_test("Ul_Ip_Sf");
    STRUCT_IF_C Ul_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Ip_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ul_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ip_Sf, Ul_Ip_Sf)
//============================================================================


struct  Ul_L_Sf  {
  __tsu64 v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Ul_L_Sf) C1{ FL[2] FC2{}}



static void Test_Ul_L_Sf()
{
  {
    init_simple_test("Ul_L_Sf");
    STRUCT_IF_C Ul_L_Sf lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_Sf)");
    check_field_offset(lv, v1, 0, "Ul_L_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_L_Sf.v2");
    check_field_offset(lv, v3, 16, "Ul_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_L_Sf, Ul_L_Sf)
//============================================================================


struct  Ul_S_Sf  {
  __tsu64 v1;
  short v2;
  struct empty v3;
};
//SIG(1 Ul_S_Sf) C1{ FL Fs FC2{}}



static void Test_Ul_S_Sf()
{
  {
    init_simple_test("Ul_S_Sf");
    STRUCT_IF_C Ul_S_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_Sf)");
    check_field_offset(lv, v1, 0, "Ul_S_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_S_Sf.v2");
    check_field_offset(lv, v3, 10, "Ul_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_S_Sf, Ul_S_Sf)
//============================================================================


struct  Ul_Sf  {
  __tsu64 v1;
  struct empty v2;
};
//SIG(1 Ul_Sf) C1{ FL FC2{}}



static void Test_Ul_Sf()
{
  {
    init_simple_test("Ul_Sf");
    STRUCT_IF_C Ul_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf, Ul_Sf)
//============================================================================


struct  Ul_Sf_BFu15i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Ul_Sf_BFu15i) C1{ FL FC2{} Fi:15}



static void Test_Ul_Sf_BFu15i()
{
  {
    init_simple_test("Ul_Sf_BFu15i");
    static STRUCT_IF_C Ul_Sf_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu15i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Ul_Sf_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu15i, Ul_Sf_BFu15i)
//============================================================================


struct  Ul_Sf_BFu15ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Ul_Sf_BFu15ll) C1{ FL FC2{} FL:15}



static void Test_Ul_Sf_BFu15ll()
{
  {
    init_simple_test("Ul_Sf_BFu15ll");
    static STRUCT_IF_C Ul_Sf_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Ul_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu15ll, Ul_Sf_BFu15ll)
//============================================================================


struct  Ul_Sf_BFu15s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Ul_Sf_BFu15s) C1{ FL FC2{} Fs:15}



static void Test_Ul_Sf_BFu15s()
{
  {
    init_simple_test("Ul_Sf_BFu15s");
    static STRUCT_IF_C Ul_Sf_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu15s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "Ul_Sf_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "Ul_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu15s, Ul_Sf_BFu15s)
//============================================================================


struct  Ul_Sf_BFu16i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Ul_Sf_BFu16i) C1{ FL FC2{} Fi:16}



static void Test_Ul_Sf_BFu16i()
{
  {
    init_simple_test("Ul_Sf_BFu16i");
    static STRUCT_IF_C Ul_Sf_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu16i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Ul_Sf_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu16i, Ul_Sf_BFu16i)
//============================================================================


struct  Ul_Sf_BFu16ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Ul_Sf_BFu16ll) C1{ FL FC2{} FL:16}



static void Test_Ul_Sf_BFu16ll()
{
  {
    init_simple_test("Ul_Sf_BFu16ll");
    static STRUCT_IF_C Ul_Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Ul_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu16ll, Ul_Sf_BFu16ll)
//============================================================================


struct  Ul_Sf_BFu16s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Ul_Sf_BFu16s) C1{ FL FC2{} Fs:16}



static void Test_Ul_Sf_BFu16s()
{
  {
    init_simple_test("Ul_Sf_BFu16s");
    static STRUCT_IF_C Ul_Sf_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu16s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "Ul_Sf_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "Ul_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu16s, Ul_Sf_BFu16s)
//============================================================================


struct  Ul_Sf_BFu17i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Ul_Sf_BFu17i) C1{ FL FC2{} Fi:17}



static void Test_Ul_Sf_BFu17i()
{
  {
    init_simple_test("Ul_Sf_BFu17i");
    static STRUCT_IF_C Ul_Sf_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu17i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Ul_Sf_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Ul_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu17i, Ul_Sf_BFu17i)
//============================================================================


struct  Ul_Sf_BFu17ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Ul_Sf_BFu17ll) C1{ FL FC2{} FL:17}



static void Test_Ul_Sf_BFu17ll()
{
  {
    init_simple_test("Ul_Sf_BFu17ll");
    static STRUCT_IF_C Ul_Sf_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "Ul_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "Ul_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu17ll, Ul_Sf_BFu17ll)
//============================================================================


struct  Ul_Sf_BFu1c  {
  __tsu64 v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Ul_Sf_BFu1c) C1{ FL FC2{} Fc:1}



static void Test_Ul_Sf_BFu1c()
{
  {
    init_simple_test("Ul_Sf_BFu1c");
    static STRUCT_IF_C Ul_Sf_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu1c.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Ul_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu1c, Ul_Sf_BFu1c)
//============================================================================


struct  Ul_Sf_BFu1i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Ul_Sf_BFu1i) C1{ FL FC2{} Fi:1}



static void Test_Ul_Sf_BFu1i()
{
  {
    init_simple_test("Ul_Sf_BFu1i");
    static STRUCT_IF_C Ul_Sf_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu1i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Ul_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu1i, Ul_Sf_BFu1i)
//============================================================================


struct  Ul_Sf_BFu1ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Ul_Sf_BFu1ll) C1{ FL FC2{} FL:1}



static void Test_Ul_Sf_BFu1ll()
{
  {
    init_simple_test("Ul_Sf_BFu1ll");
    static STRUCT_IF_C Ul_Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Ul_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu1ll, Ul_Sf_BFu1ll)
//============================================================================


struct  Ul_Sf_BFu1s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Ul_Sf_BFu1s) C1{ FL FC2{} Fs:1}



static void Test_Ul_Sf_BFu1s()
{
  {
    init_simple_test("Ul_Sf_BFu1s");
    static STRUCT_IF_C Ul_Sf_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu1s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "Ul_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu1s, Ul_Sf_BFu1s)
//============================================================================


struct  Ul_Sf_BFu31i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Ul_Sf_BFu31i) C1{ FL FC2{} Fi:31}



static void Test_Ul_Sf_BFu31i()
{
  {
    init_simple_test("Ul_Sf_BFu31i");
    static STRUCT_IF_C Ul_Sf_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu31i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Ul_Sf_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Ul_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu31i, Ul_Sf_BFu31i)
//============================================================================


struct  Ul_Sf_BFu31ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Ul_Sf_BFu31ll) C1{ FL FC2{} FL:31}



static void Test_Ul_Sf_BFu31ll()
{
  {
    init_simple_test("Ul_Sf_BFu31ll");
    static STRUCT_IF_C Ul_Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "Ul_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "Ul_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu31ll, Ul_Sf_BFu31ll)
//============================================================================


struct  Ul_Sf_BFu32i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Ul_Sf_BFu32i) C1{ FL FC2{} Fi:32}



static void Test_Ul_Sf_BFu32i()
{
  {
    init_simple_test("Ul_Sf_BFu32i");
    static STRUCT_IF_C Ul_Sf_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu32i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Ul_Sf_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Ul_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu32i, Ul_Sf_BFu32i)
//============================================================================


struct  Ul_Sf_BFu32ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Ul_Sf_BFu32ll) C1{ FL FC2{} FL:32}



static void Test_Ul_Sf_BFu32ll()
{
  {
    init_simple_test("Ul_Sf_BFu32ll");
    static STRUCT_IF_C Ul_Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "Ul_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "Ul_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu32ll, Ul_Sf_BFu32ll)
//============================================================================


struct  Ul_Sf_BFu33  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Ul_Sf_BFu33) C1{ FL FC2{} FL:33}



static void Test_Ul_Sf_BFu33()
{
  {
    init_simple_test("Ul_Sf_BFu33");
    static STRUCT_IF_C Ul_Sf_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu33.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "Ul_Sf_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "Ul_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu33, Ul_Sf_BFu33)
//============================================================================


struct  Ul_Sf_BFu7c  {
  __tsu64 v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Ul_Sf_BFu7c) C1{ FL FC2{} Fc:7}



static void Test_Ul_Sf_BFu7c()
{
  {
    init_simple_test("Ul_Sf_BFu7c");
    static STRUCT_IF_C Ul_Sf_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu7c.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Ul_Sf_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu7c, Ul_Sf_BFu7c)
//============================================================================


struct  Ul_Sf_BFu7i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Ul_Sf_BFu7i) C1{ FL FC2{} Fi:7}



static void Test_Ul_Sf_BFu7i()
{
  {
    init_simple_test("Ul_Sf_BFu7i");
    static STRUCT_IF_C Ul_Sf_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu7i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Ul_Sf_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu7i, Ul_Sf_BFu7i)
//============================================================================


struct  Ul_Sf_BFu7ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Ul_Sf_BFu7ll) C1{ FL FC2{} FL:7}



static void Test_Ul_Sf_BFu7ll()
{
  {
    init_simple_test("Ul_Sf_BFu7ll");
    static STRUCT_IF_C Ul_Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Ul_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu7ll, Ul_Sf_BFu7ll)
//============================================================================


struct  Ul_Sf_BFu7s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Ul_Sf_BFu7s) C1{ FL FC2{} Fs:7}



static void Test_Ul_Sf_BFu7s()
{
  {
    init_simple_test("Ul_Sf_BFu7s");
    static STRUCT_IF_C Ul_Sf_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu7s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "Ul_Sf_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "Ul_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu7s, Ul_Sf_BFu7s)
//============================================================================


struct  Ul_Sf_BFu8c  {
  __tsu64 v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Ul_Sf_BFu8c) C1{ FL FC2{} Fc:8}



static void Test_Ul_Sf_BFu8c()
{
  {
    init_simple_test("Ul_Sf_BFu8c");
    static STRUCT_IF_C Ul_Sf_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu8c.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Ul_Sf_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu8c, Ul_Sf_BFu8c)
//============================================================================


struct  Ul_Sf_BFu8i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Ul_Sf_BFu8i) C1{ FL FC2{} Fi:8}



static void Test_Ul_Sf_BFu8i()
{
  {
    init_simple_test("Ul_Sf_BFu8i");
    static STRUCT_IF_C Ul_Sf_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu8i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Ul_Sf_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu8i, Ul_Sf_BFu8i)
//============================================================================


struct  Ul_Sf_BFu8ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Ul_Sf_BFu8ll) C1{ FL FC2{} FL:8}



static void Test_Ul_Sf_BFu8ll()
{
  {
    init_simple_test("Ul_Sf_BFu8ll");
    static STRUCT_IF_C Ul_Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Ul_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu8ll, Ul_Sf_BFu8ll)
//============================================================================


struct  Ul_Sf_BFu8s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Ul_Sf_BFu8s) C1{ FL FC2{} Fs:8}



static void Test_Ul_Sf_BFu8s()
{
  {
    init_simple_test("Ul_Sf_BFu8s");
    static STRUCT_IF_C Ul_Sf_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu8s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "Ul_Sf_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "Ul_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu8s, Ul_Sf_BFu8s)
//============================================================================


struct  Ul_Sf_BFu9i  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Ul_Sf_BFu9i) C1{ FL FC2{} Fi:9}



static void Test_Ul_Sf_BFu9i()
{
  {
    init_simple_test("Ul_Sf_BFu9i");
    static STRUCT_IF_C Ul_Sf_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu9i.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Ul_Sf_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu9i, Ul_Sf_BFu9i)
//============================================================================


struct  Ul_Sf_BFu9ll  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Ul_Sf_BFu9ll) C1{ FL FC2{} FL:9}



static void Test_Ul_Sf_BFu9ll()
{
  {
    init_simple_test("Ul_Sf_BFu9ll");
    static STRUCT_IF_C Ul_Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Ul_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu9ll, Ul_Sf_BFu9ll)
//============================================================================


struct  Ul_Sf_BFu9s  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Ul_Sf_BFu9s) C1{ FL FC2{} Fs:9}



static void Test_Ul_Sf_BFu9s()
{
  {
    init_simple_test("Ul_Sf_BFu9s");
    static STRUCT_IF_C Ul_Sf_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_Sf_BFu9s.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "Ul_Sf_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "Ul_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_BFu9s, Ul_Sf_BFu9s)
//============================================================================


struct  Ul_Sf_C  {
  __tsu64 v1;
  struct empty v2;
  char v3;
};
//SIG(1 Ul_Sf_C) C1{ FL FC2{} Fc}



static void Test_Ul_Sf_C()
{
  {
    init_simple_test("Ul_Sf_C");
    STRUCT_IF_C Ul_Sf_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_C)");
    check_field_offset(lv, v1, 0, "Ul_Sf_C.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_C.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_C, Ul_Sf_C)
//============================================================================


struct  Ul_Sf_D  {
  __tsu64 v1;
  struct empty v2;
  double v3;
};
//SIG(1 Ul_Sf_D) C1{ FL FC2{} FL}



static void Test_Ul_Sf_D()
{
  {
    init_simple_test("Ul_Sf_D");
    STRUCT_IF_C Ul_Sf_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_D)");
    check_field_offset(lv, v1, 0, "Ul_Sf_D.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_D.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_D, Ul_Sf_D)
//============================================================================


struct  Ul_Sf_F  {
  __tsu64 v1;
  struct empty v2;
  float v3;
};
//SIG(1 Ul_Sf_F) C1{ FL FC2{} Fi}



static void Test_Ul_Sf_F()
{
  {
    init_simple_test("Ul_Sf_F");
    STRUCT_IF_C Ul_Sf_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_F)");
    check_field_offset(lv, v1, 0, "Ul_Sf_F.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_F.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_F, Ul_Sf_F)
//============================================================================


struct  Ul_Sf_I  {
  __tsu64 v1;
  struct empty v2;
  int v3;
};
//SIG(1 Ul_Sf_I) C1{ FL FC2{} Fi}



static void Test_Ul_Sf_I()
{
  {
    init_simple_test("Ul_Sf_I");
    STRUCT_IF_C Ul_Sf_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_I)");
    check_field_offset(lv, v1, 0, "Ul_Sf_I.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_I.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_I, Ul_Sf_I)
//============================================================================


struct  Ul_Sf_Ip  {
  __tsu64 v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Ul_Sf_Ip) C1{ FL FC2{} Fp}



static void Test_Ul_Sf_Ip()
{
  {
    init_simple_test("Ul_Sf_Ip");
    STRUCT_IF_C Ul_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Ip.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Ip, Ul_Sf_Ip)
//============================================================================


struct  Ul_Sf_L  {
  __tsu64 v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Ul_Sf_L) C1{ FL FC2{} FL}



static void Test_Ul_Sf_L()
{
  {
    init_simple_test("Ul_Sf_L");
    STRUCT_IF_C Ul_Sf_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_L)");
    check_field_offset(lv, v1, 0, "Ul_Sf_L.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_L.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_L, Ul_Sf_L)
//============================================================================


struct  Ul_Sf_S  {
  __tsu64 v1;
  struct empty v2;
  short v3;
};
//SIG(1 Ul_Sf_S) C1{ FL FC2{} Fs}



static void Test_Ul_Sf_S()
{
  {
    init_simple_test("Ul_Sf_S");
    STRUCT_IF_C Ul_Sf_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_S)");
    check_field_offset(lv, v1, 0, "Ul_Sf_S.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_S.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_S, Ul_Sf_S)
//============================================================================


struct  Ul_Sf_Sf  {
  __tsu64 v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Ul_Sf_Sf) C1{ FL FC2{} FC2}



static void Test_Ul_Sf_Sf()
{
  {
    init_simple_test("Ul_Sf_Sf");
    STRUCT_IF_C Ul_Sf_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Ul_Sf_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Sf.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Sf, Ul_Sf_Sf)
//============================================================================


struct  Ul_Sf_Uc  {
  __tsu64 v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Ul_Sf_Uc) C1{ FL FC2{} Fc}



static void Test_Ul_Sf_Uc()
{
  {
    init_simple_test("Ul_Sf_Uc");
    STRUCT_IF_C Ul_Sf_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Uc.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Uc, Ul_Sf_Uc)
//============================================================================


struct  Ul_Sf_Ui  {
  __tsu64 v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Ul_Sf_Ui) C1{ FL FC2{} Fi}



static void Test_Ul_Sf_Ui()
{
  {
    init_simple_test("Ul_Sf_Ui");
    STRUCT_IF_C Ul_Sf_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Ui.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Ui, Ul_Sf_Ui)
//============================================================================


struct  Ul_Sf_Ul  {
  __tsu64 v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Ul_Sf_Ul) C1{ FL FC2{} FL}



static void Test_Ul_Sf_Ul()
{
  {
    init_simple_test("Ul_Sf_Ul");
    STRUCT_IF_C Ul_Sf_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Ul.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Ul, Ul_Sf_Ul)
//============================================================================


struct  Ul_Sf_Us  {
  __tsu64 v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Ul_Sf_Us) C1{ FL FC2{} Fs}



static void Test_Ul_Sf_Us()
{
  {
    init_simple_test("Ul_Sf_Us");
    STRUCT_IF_C Ul_Sf_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Us)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Us.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Us, Ul_Sf_Us)
//============================================================================


struct  Ul_Sf_Vp  {
  __tsu64 v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Ul_Sf_Vp) C1{ FL FC2{} Fp}



static void Test_Ul_Sf_Vp()
{
  {
    init_simple_test("Ul_Sf_Vp");
    STRUCT_IF_C Ul_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Ul_Sf_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_Sf_Vp.v2");
    check_field_offset(lv, v3, 8, "Ul_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Sf_Vp, Ul_Sf_Vp)
//============================================================================


struct  Ul_Uc_Sf  {
  __tsu64 v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Ul_Uc_Sf) C1{ FL Fc FC2{}}



static void Test_Ul_Uc_Sf()
{
  {
    init_simple_test("Ul_Uc_Sf");
    STRUCT_IF_C Ul_Uc_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Uc_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_Sf.v2");
    check_field_offset(lv, v3, 9, "Ul_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Uc_Sf, Ul_Uc_Sf)
//============================================================================


struct  Ul_Ui_Sf  {
  __tsu64 v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Ul_Ui_Sf) C1{ FL Fi FC2{}}



static void Test_Ul_Ui_Sf()
{
  {
    init_simple_test("Ul_Ui_Sf");
    STRUCT_IF_C Ul_Ui_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Ui_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_Sf.v2");
    check_field_offset(lv, v3, 12, "Ul_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ui_Sf, Ul_Ui_Sf)
//============================================================================


struct  Ul_Ul_Sf  {
  __tsu64 v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Ul_Ul_Sf) C1{ FL[2] FC2{}}



static void Test_Ul_Ul_Sf()
{
  {
    init_simple_test("Ul_Ul_Sf");
    STRUCT_IF_C Ul_Ul_Sf lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Ul_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_Sf.v2");
    check_field_offset(lv, v3, 16, "Ul_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ul_Sf, Ul_Ul_Sf)
//============================================================================


struct  Ul_Us_Sf  {
  __tsu64 v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Ul_Us_Sf) C1{ FL Fs FC2{}}



static void Test_Ul_Us_Sf()
{
  {
    init_simple_test("Ul_Us_Sf");
    STRUCT_IF_C Ul_Us_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Us_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_Sf.v2");
    check_field_offset(lv, v3, 10, "Ul_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Us_Sf, Ul_Us_Sf)
//============================================================================


struct  Ul_Vp_Sf  {
  __tsu64 v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Ul_Vp_Sf) C1{ FL Fp FC2{}}



static void Test_Ul_Vp_Sf()
{
  {
    init_simple_test("Ul_Vp_Sf");
    STRUCT_IF_C Ul_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Ul_Vp_Sf.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Ul_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Vp_Sf, Ul_Vp_Sf)
//============================================================================


struct  Us_BFu15i_Sf  {
  unsigned short v1;
  unsigned int v2:15;
  struct empty v3;
};
//SIG(1 Us_BFu15i_Sf) C1{ Fs Fi:15 FC2{}}



static void Test_Us_BFu15i_Sf()
{
  {
    init_simple_test("Us_BFu15i_Sf");
    static STRUCT_IF_C Us_BFu15i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_Sf");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu15i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15i_Sf, Us_BFu15i_Sf)
//============================================================================


struct  Us_BFu15ll_Sf  {
  unsigned short v1;
  __tsu64 v2:15;
  struct empty v3;
};
//SIG(1 Us_BFu15ll_Sf) C1{ Fs FL:15 FC2{}}



static void Test_Us_BFu15ll_Sf()
{
  {
    init_simple_test("Us_BFu15ll_Sf");
    static STRUCT_IF_C Us_BFu15ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu15ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15ll_Sf, Us_BFu15ll_Sf)
//============================================================================


struct  Us_BFu15s_Sf  {
  unsigned short v1;
  unsigned short v2:15;
  struct empty v3;
};
//SIG(1 Us_BFu15s_Sf) C1{ Fs Fs:15 FC2{}}



static void Test_Us_BFu15s_Sf()
{
  {
    init_simple_test("Us_BFu15s_Sf");
    static STRUCT_IF_C Us_BFu15s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu15s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu15s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15s_Sf, Us_BFu15s_Sf)
//============================================================================


struct  Us_BFu16i_Sf  {
  unsigned short v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Us_BFu16i_Sf) C1{ Fs Fi:16 FC2{}}



static void Test_Us_BFu16i_Sf()
{
  {
    init_simple_test("Us_BFu16i_Sf");
    static STRUCT_IF_C Us_BFu16i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_Sf");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16i_Sf, Us_BFu16i_Sf)
//============================================================================


struct  Us_BFu16ll_Sf  {
  unsigned short v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Us_BFu16ll_Sf) C1{ Fs FL:16 FC2{}}



static void Test_Us_BFu16ll_Sf()
{
  {
    init_simple_test("Us_BFu16ll_Sf");
    static STRUCT_IF_C Us_BFu16ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16ll_Sf, Us_BFu16ll_Sf)
//============================================================================


struct  Us_BFu16s_Sf  {
  unsigned short v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Us_BFu16s_Sf) C1{ Fs Fs:16 FC2{}}



static void Test_Us_BFu16s_Sf()
{
  {
    init_simple_test("Us_BFu16s_Sf");
    static STRUCT_IF_C Us_BFu16s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16s_Sf, Us_BFu16s_Sf)
//============================================================================


struct  Us_BFu17i_Sf  {
  unsigned short v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Us_BFu17i_Sf) C1{ Fs Fi:17 FC2{}}



static void Test_Us_BFu17i_Sf()
{
  {
    init_simple_test("Us_BFu17i_Sf");
    static STRUCT_IF_C Us_BFu17i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_Sf");
    check_field_offset(lv, v3, 7, "Us_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17i_Sf, Us_BFu17i_Sf)
//============================================================================


struct  Us_BFu17ll_Sf  {
  unsigned short v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Us_BFu17ll_Sf) C1{ Fs FL:17 FC2{}}



static void Test_Us_BFu17ll_Sf()
{
  {
    init_simple_test("Us_BFu17ll_Sf");
    static STRUCT_IF_C Us_BFu17ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_Sf");
    check_field_offset(lv, v3, 5, "Us_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17ll_Sf, Us_BFu17ll_Sf)
//============================================================================


struct  Us_BFu1c_Sf  {
  unsigned short v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Us_BFu1c_Sf) C1{ Fs Fc:1 FC2{}}



static void Test_Us_BFu1c_Sf()
{
  {
    init_simple_test("Us_BFu1c_Sf");
    static STRUCT_IF_C Us_BFu1c_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1c_Sf, Us_BFu1c_Sf)
//============================================================================


struct  Us_BFu1i_Sf  {
  unsigned short v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Us_BFu1i_Sf) C1{ Fs Fi:1 FC2{}}



static void Test_Us_BFu1i_Sf()
{
  {
    init_simple_test("Us_BFu1i_Sf");
    static STRUCT_IF_C Us_BFu1i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1i_Sf, Us_BFu1i_Sf)
//============================================================================


struct  Us_BFu1ll_Sf  {
  unsigned short v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Us_BFu1ll_Sf) C1{ Fs FL:1 FC2{}}



static void Test_Us_BFu1ll_Sf()
{
  {
    init_simple_test("Us_BFu1ll_Sf");
    static STRUCT_IF_C Us_BFu1ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1ll_Sf, Us_BFu1ll_Sf)
//============================================================================


struct  Us_BFu1s_Sf  {
  unsigned short v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Us_BFu1s_Sf) C1{ Fs Fs:1 FC2{}}



static void Test_Us_BFu1s_Sf()
{
  {
    init_simple_test("Us_BFu1s_Sf");
    static STRUCT_IF_C Us_BFu1s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1s_Sf, Us_BFu1s_Sf)
//============================================================================


struct  Us_BFu31i_Sf  {
  unsigned short v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Us_BFu31i_Sf) C1{ Fs Fi:31 FC2{}}



static void Test_Us_BFu31i_Sf()
{
  {
    init_simple_test("Us_BFu31i_Sf");
    static STRUCT_IF_C Us_BFu31i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_Sf");
    check_field_offset(lv, v3, 8, "Us_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31i_Sf, Us_BFu31i_Sf)
//============================================================================


struct  Us_BFu31ll_Sf  {
  unsigned short v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Us_BFu31ll_Sf) C1{ Fs FL:31 FC2{}}



static void Test_Us_BFu31ll_Sf()
{
  {
    init_simple_test("Us_BFu31ll_Sf");
    static STRUCT_IF_C Us_BFu31ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_Sf");
    check_field_offset(lv, v3, 6, "Us_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31ll_Sf, Us_BFu31ll_Sf)
//============================================================================


struct  Us_BFu32i_Sf  {
  unsigned short v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Us_BFu32i_Sf) C1{ Fs Fi:32 FC2{}}



static void Test_Us_BFu32i_Sf()
{
  {
    init_simple_test("Us_BFu32i_Sf");
    static STRUCT_IF_C Us_BFu32i_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_Sf");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_Sf");
    check_field_offset(lv, v3, 8, "Us_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32i_Sf, Us_BFu32i_Sf)
//============================================================================


struct  Us_BFu32ll_Sf  {
  unsigned short v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Us_BFu32ll_Sf) C1{ Fs FL:32 FC2{}}



static void Test_Us_BFu32ll_Sf()
{
  {
    init_simple_test("Us_BFu32ll_Sf");
    static STRUCT_IF_C Us_BFu32ll_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_Sf");
    check_field_offset(lv, v3, 6, "Us_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32ll_Sf, Us_BFu32ll_Sf)
//============================================================================


struct  Us_BFu33_Sf  {
  unsigned short v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Us_BFu33_Sf) C1{ Fs FL:33 FC2{}}



static void Test_Us_BFu33_Sf()
{
  {
    init_simple_test("Us_BFu33_Sf");
    static STRUCT_IF_C Us_BFu33_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_Sf");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_Sf");
    check_field_offset(lv, v3, 7, "Us_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu33_Sf, Us_BFu33_Sf)
//============================================================================


struct  Us_BFu7c_Sf  {
  unsigned short v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Us_BFu7c_Sf) C1{ Fs Fc:7 FC2{}}



static void Test_Us_BFu7c_Sf()
{
  {
    init_simple_test("Us_BFu7c_Sf");
    static STRUCT_IF_C Us_BFu7c_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_Sf");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7c_Sf, Us_BFu7c_Sf)
//============================================================================


struct  Us_BFu7i_Sf  {
  unsigned short v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Us_BFu7i_Sf) C1{ Fs Fi:7 FC2{}}



static void Test_Us_BFu7i_Sf()
{
  {
    init_simple_test("Us_BFu7i_Sf");
    static STRUCT_IF_C Us_BFu7i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_Sf");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7i_Sf, Us_BFu7i_Sf)
//============================================================================


struct  Us_BFu7ll_Sf  {
  unsigned short v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Us_BFu7ll_Sf) C1{ Fs FL:7 FC2{}}



static void Test_Us_BFu7ll_Sf()
{
  {
    init_simple_test("Us_BFu7ll_Sf");
    static STRUCT_IF_C Us_BFu7ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7ll_Sf, Us_BFu7ll_Sf)
//============================================================================


struct  Us_BFu7s_Sf  {
  unsigned short v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Us_BFu7s_Sf) C1{ Fs Fs:7 FC2{}}



static void Test_Us_BFu7s_Sf()
{
  {
    init_simple_test("Us_BFu7s_Sf");
    static STRUCT_IF_C Us_BFu7s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7s_Sf, Us_BFu7s_Sf)
//============================================================================


struct  Us_BFu8c_Sf  {
  unsigned short v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Us_BFu8c_Sf) C1{ Fs Fc:8 FC2{}}



static void Test_Us_BFu8c_Sf()
{
  {
    init_simple_test("Us_BFu8c_Sf");
    static STRUCT_IF_C Us_BFu8c_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_Sf");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8c_Sf, Us_BFu8c_Sf)
//============================================================================


struct  Us_BFu8i_Sf  {
  unsigned short v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Us_BFu8i_Sf) C1{ Fs Fi:8 FC2{}}



static void Test_Us_BFu8i_Sf()
{
  {
    init_simple_test("Us_BFu8i_Sf");
    static STRUCT_IF_C Us_BFu8i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_Sf");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8i_Sf, Us_BFu8i_Sf)
//============================================================================


struct  Us_BFu8ll_Sf  {
  unsigned short v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Us_BFu8ll_Sf) C1{ Fs FL:8 FC2{}}



static void Test_Us_BFu8ll_Sf()
{
  {
    init_simple_test("Us_BFu8ll_Sf");
    static STRUCT_IF_C Us_BFu8ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8ll_Sf, Us_BFu8ll_Sf)
//============================================================================


struct  Us_BFu8s_Sf  {
  unsigned short v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Us_BFu8s_Sf) C1{ Fs Fs:8 FC2{}}



static void Test_Us_BFu8s_Sf()
{
  {
    init_simple_test("Us_BFu8s_Sf");
    static STRUCT_IF_C Us_BFu8s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_Sf");
    check_field_offset(lv, v3, 3, "Us_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8s_Sf, Us_BFu8s_Sf)
//============================================================================


struct  Us_BFu9i_Sf  {
  unsigned short v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Us_BFu9i_Sf) C1{ Fs Fi:9 FC2{}}



static void Test_Us_BFu9i_Sf()
{
  {
    init_simple_test("Us_BFu9i_Sf");
    static STRUCT_IF_C Us_BFu9i_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_Sf");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9i_Sf, Us_BFu9i_Sf)
//============================================================================


struct  Us_BFu9ll_Sf  {
  unsigned short v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Us_BFu9ll_Sf) C1{ Fs FL:9 FC2{}}



static void Test_Us_BFu9ll_Sf()
{
  {
    init_simple_test("Us_BFu9ll_Sf");
    static STRUCT_IF_C Us_BFu9ll_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_Sf");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9ll_Sf, Us_BFu9ll_Sf)
//============================================================================


struct  Us_BFu9s_Sf  {
  unsigned short v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Us_BFu9s_Sf) C1{ Fs Fs:9 FC2{}}



static void Test_Us_BFu9s_Sf()
{
  {
    init_simple_test("Us_BFu9s_Sf");
    static STRUCT_IF_C Us_BFu9s_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_Sf");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_Sf");
    check_field_offset(lv, v3, 4, "Us_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9s_Sf, Us_BFu9s_Sf)
//============================================================================


struct  Us_C_Sf  {
  unsigned short v1;
  char v2;
  struct empty v3;
};
//SIG(1 Us_C_Sf) C1{ Fs Fc FC2{}}



static void Test_Us_C_Sf()
{
  {
    init_simple_test("Us_C_Sf");
    STRUCT_IF_C Us_C_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_C_Sf)");
    check_field_offset(lv, v1, 0, "Us_C_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_C_Sf.v2");
    check_field_offset(lv, v3, 3, "Us_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_C_Sf, Us_C_Sf)
//============================================================================


struct  Us_D_Sf  {
  unsigned short v1;
  double v2;
  struct empty v3;
};
//SIG(1 Us_D_Sf) C1{ Fs FL FC2{}}



static void Test_Us_D_Sf()
{
  {
    init_simple_test("Us_D_Sf");
    STRUCT_IF_C Us_D_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_Sf)");
    check_field_offset(lv, v1, 0, "Us_D_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Us_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_D_Sf, Us_D_Sf)
//============================================================================


struct  Us_F_Sf  {
  unsigned short v1;
  float v2;
  struct empty v3;
};
//SIG(1 Us_F_Sf) C1{ Fs Fi FC2{}}



static void Test_Us_F_Sf()
{
  {
    init_simple_test("Us_F_Sf");
    STRUCT_IF_C Us_F_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_Sf)");
    check_field_offset(lv, v1, 0, "Us_F_Sf.v1");
    check_field_offset(lv, v2, 4, "Us_F_Sf.v2");
    check_field_offset(lv, v3, 8, "Us_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_F_Sf, Us_F_Sf)
//============================================================================


struct  Us_I_Sf  {
  unsigned short v1;
  int v2;
  struct empty v3;
};
//SIG(1 Us_I_Sf) C1{ Fs Fi FC2{}}



static void Test_Us_I_Sf()
{
  {
    init_simple_test("Us_I_Sf");
    STRUCT_IF_C Us_I_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_Sf)");
    check_field_offset(lv, v1, 0, "Us_I_Sf.v1");
    check_field_offset(lv, v2, 4, "Us_I_Sf.v2");
    check_field_offset(lv, v3, 8, "Us_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_I_Sf, Us_I_Sf)
//============================================================================


struct  Us_Ip_Sf  {
  unsigned short v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Us_Ip_Sf) C1{ Fs Fp FC2{}}



static void Test_Us_Ip_Sf()
{
  {
    init_simple_test("Us_Ip_Sf");
    STRUCT_IF_C Us_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Us_Ip_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Us_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ip_Sf, Us_Ip_Sf)
//============================================================================


struct  Us_L_Sf  {
  unsigned short v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Us_L_Sf) C1{ Fs FL FC2{}}



static void Test_Us_L_Sf()
{
  {
    init_simple_test("Us_L_Sf");
    STRUCT_IF_C Us_L_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_Sf)");
    check_field_offset(lv, v1, 0, "Us_L_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Us_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_L_Sf, Us_L_Sf)
//============================================================================


struct  Us_S_Sf  {
  unsigned short v1;
  short v2;
  struct empty v3;
};
//SIG(1 Us_S_Sf) C1{ Fs[2] FC2{}}



static void Test_Us_S_Sf()
{
  {
    init_simple_test("Us_S_Sf");
    STRUCT_IF_C Us_S_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_S_Sf)");
    check_field_offset(lv, v1, 0, "Us_S_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_S_Sf.v2");
    check_field_offset(lv, v3, 4, "Us_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_S_Sf, Us_S_Sf)
//============================================================================


struct  Us_Sf  {
  unsigned short v1;
  struct empty v2;
};
//SIG(1 Us_Sf) C1{ Fs FC2{}}



static void Test_Us_Sf()
{
  {
    init_simple_test("Us_Sf");
    STRUCT_IF_C Us_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Us_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf)");
    check_field_offset(lv, v1, 0, "Us_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf, Us_Sf)
//============================================================================


struct  Us_Sf_BFu15i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Us_Sf_BFu15i) C1{ Fs FC2{} Fi:15}



static void Test_Us_Sf_BFu15i()
{
  {
    init_simple_test("Us_Sf_BFu15i");
    static STRUCT_IF_C Us_Sf_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu15i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Us_Sf_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu15i, Us_Sf_BFu15i)
//============================================================================


struct  Us_Sf_BFu15ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Us_Sf_BFu15ll) C1{ Fs FC2{} FL:15}



static void Test_Us_Sf_BFu15ll()
{
  {
    init_simple_test("Us_Sf_BFu15ll");
    static STRUCT_IF_C Us_Sf_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Us_Sf_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu15ll, Us_Sf_BFu15ll)
//============================================================================


struct  Us_Sf_BFu15s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Us_Sf_BFu15s) C1{ Fs FC2{} Fs:15}



static void Test_Us_Sf_BFu15s()
{
  {
    init_simple_test("Us_Sf_BFu15s");
    static STRUCT_IF_C Us_Sf_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu15s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "Us_Sf_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "Us_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu15s, Us_Sf_BFu15s)
//============================================================================


struct  Us_Sf_BFu16i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Us_Sf_BFu16i) C1{ Fs FC2{} Fi:16}



static void Test_Us_Sf_BFu16i()
{
  {
    init_simple_test("Us_Sf_BFu16i");
    static STRUCT_IF_C Us_Sf_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu16i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Us_Sf_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu16i, Us_Sf_BFu16i)
//============================================================================


struct  Us_Sf_BFu16ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Us_Sf_BFu16ll) C1{ Fs FC2{} FL:16}



static void Test_Us_Sf_BFu16ll()
{
  {
    init_simple_test("Us_Sf_BFu16ll");
    static STRUCT_IF_C Us_Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Us_Sf_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu16ll, Us_Sf_BFu16ll)
//============================================================================


struct  Us_Sf_BFu16s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Us_Sf_BFu16s) C1{ Fs FC2{} Fs:16}



static void Test_Us_Sf_BFu16s()
{
  {
    init_simple_test("Us_Sf_BFu16s");
    static STRUCT_IF_C Us_Sf_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu16s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "Us_Sf_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "Us_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu16s, Us_Sf_BFu16s)
//============================================================================


struct  Us_Sf_BFu17i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Us_Sf_BFu17i) C1{ Fs FC2{} Fi:17}



static void Test_Us_Sf_BFu17i()
{
  {
    init_simple_test("Us_Sf_BFu17i");
    static STRUCT_IF_C Us_Sf_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu17i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "Us_Sf_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "Us_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu17i, Us_Sf_BFu17i)
//============================================================================


struct  Us_Sf_BFu17ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Us_Sf_BFu17ll) C1{ Fs FC2{} FL:17}



static void Test_Us_Sf_BFu17ll()
{
  {
    init_simple_test("Us_Sf_BFu17ll");
    static STRUCT_IF_C Us_Sf_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "Us_Sf_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "Us_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu17ll, Us_Sf_BFu17ll)
//============================================================================


struct  Us_Sf_BFu1c  {
  unsigned short v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Us_Sf_BFu1c) C1{ Fs FC2{} Fc:1}



static void Test_Us_Sf_BFu1c()
{
  {
    init_simple_test("Us_Sf_BFu1c");
    static STRUCT_IF_C Us_Sf_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu1c.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Us_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu1c, Us_Sf_BFu1c)
//============================================================================


struct  Us_Sf_BFu1i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Us_Sf_BFu1i) C1{ Fs FC2{} Fi:1}



static void Test_Us_Sf_BFu1i()
{
  {
    init_simple_test("Us_Sf_BFu1i");
    static STRUCT_IF_C Us_Sf_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu1i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Us_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu1i, Us_Sf_BFu1i)
//============================================================================


struct  Us_Sf_BFu1ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Us_Sf_BFu1ll) C1{ Fs FC2{} FL:1}



static void Test_Us_Sf_BFu1ll()
{
  {
    init_simple_test("Us_Sf_BFu1ll");
    static STRUCT_IF_C Us_Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Us_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu1ll, Us_Sf_BFu1ll)
//============================================================================


struct  Us_Sf_BFu1s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Us_Sf_BFu1s) C1{ Fs FC2{} Fs:1}



static void Test_Us_Sf_BFu1s()
{
  {
    init_simple_test("Us_Sf_BFu1s");
    static STRUCT_IF_C Us_Sf_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu1s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "Us_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu1s, Us_Sf_BFu1s)
//============================================================================


struct  Us_Sf_BFu31i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Us_Sf_BFu31i) C1{ Fs FC2{} Fi:31}



static void Test_Us_Sf_BFu31i()
{
  {
    init_simple_test("Us_Sf_BFu31i");
    static STRUCT_IF_C Us_Sf_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu31i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "Us_Sf_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "Us_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu31i, Us_Sf_BFu31i)
//============================================================================


struct  Us_Sf_BFu31ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Us_Sf_BFu31ll) C1{ Fs FC2{} FL:31}



static void Test_Us_Sf_BFu31ll()
{
  {
    init_simple_test("Us_Sf_BFu31ll");
    static STRUCT_IF_C Us_Sf_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "Us_Sf_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "Us_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu31ll, Us_Sf_BFu31ll)
//============================================================================


struct  Us_Sf_BFu32i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Us_Sf_BFu32i) C1{ Fs FC2{} Fi:32}



static void Test_Us_Sf_BFu32i()
{
  {
    init_simple_test("Us_Sf_BFu32i");
    static STRUCT_IF_C Us_Sf_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu32i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "Us_Sf_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "Us_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu32i, Us_Sf_BFu32i)
//============================================================================


struct  Us_Sf_BFu32ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Us_Sf_BFu32ll) C1{ Fs FC2{} FL:32}



static void Test_Us_Sf_BFu32ll()
{
  {
    init_simple_test("Us_Sf_BFu32ll");
    static STRUCT_IF_C Us_Sf_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "Us_Sf_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "Us_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu32ll, Us_Sf_BFu32ll)
//============================================================================


struct  Us_Sf_BFu33  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Us_Sf_BFu33) C1{ Fs FC2{} FL:33}



static void Test_Us_Sf_BFu33()
{
  {
    init_simple_test("Us_Sf_BFu33");
    static STRUCT_IF_C Us_Sf_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu33.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "Us_Sf_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "Us_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu33, Us_Sf_BFu33)
//============================================================================


struct  Us_Sf_BFu7c  {
  unsigned short v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Us_Sf_BFu7c) C1{ Fs FC2{} Fc:7}



static void Test_Us_Sf_BFu7c()
{
  {
    init_simple_test("Us_Sf_BFu7c");
    static STRUCT_IF_C Us_Sf_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu7c.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Us_Sf_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu7c, Us_Sf_BFu7c)
//============================================================================


struct  Us_Sf_BFu7i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Us_Sf_BFu7i) C1{ Fs FC2{} Fi:7}



static void Test_Us_Sf_BFu7i()
{
  {
    init_simple_test("Us_Sf_BFu7i");
    static STRUCT_IF_C Us_Sf_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu7i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Us_Sf_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu7i, Us_Sf_BFu7i)
//============================================================================


struct  Us_Sf_BFu7ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Us_Sf_BFu7ll) C1{ Fs FC2{} FL:7}



static void Test_Us_Sf_BFu7ll()
{
  {
    init_simple_test("Us_Sf_BFu7ll");
    static STRUCT_IF_C Us_Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Us_Sf_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu7ll, Us_Sf_BFu7ll)
//============================================================================


struct  Us_Sf_BFu7s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Us_Sf_BFu7s) C1{ Fs FC2{} Fs:7}



static void Test_Us_Sf_BFu7s()
{
  {
    init_simple_test("Us_Sf_BFu7s");
    static STRUCT_IF_C Us_Sf_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu7s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "Us_Sf_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "Us_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu7s, Us_Sf_BFu7s)
//============================================================================


struct  Us_Sf_BFu8c  {
  unsigned short v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Us_Sf_BFu8c) C1{ Fs FC2{} Fc:8}



static void Test_Us_Sf_BFu8c()
{
  {
    init_simple_test("Us_Sf_BFu8c");
    static STRUCT_IF_C Us_Sf_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu8c.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Us_Sf_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu8c, Us_Sf_BFu8c)
//============================================================================


struct  Us_Sf_BFu8i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Us_Sf_BFu8i) C1{ Fs FC2{} Fi:8}



static void Test_Us_Sf_BFu8i()
{
  {
    init_simple_test("Us_Sf_BFu8i");
    static STRUCT_IF_C Us_Sf_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu8i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Us_Sf_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu8i, Us_Sf_BFu8i)
//============================================================================


struct  Us_Sf_BFu8ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Us_Sf_BFu8ll) C1{ Fs FC2{} FL:8}



static void Test_Us_Sf_BFu8ll()
{
  {
    init_simple_test("Us_Sf_BFu8ll");
    static STRUCT_IF_C Us_Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Us_Sf_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu8ll, Us_Sf_BFu8ll)
//============================================================================


struct  Us_Sf_BFu8s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Us_Sf_BFu8s) C1{ Fs FC2{} Fs:8}



static void Test_Us_Sf_BFu8s()
{
  {
    init_simple_test("Us_Sf_BFu8s");
    static STRUCT_IF_C Us_Sf_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu8s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "Us_Sf_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "Us_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu8s, Us_Sf_BFu8s)
//============================================================================


struct  Us_Sf_BFu9i  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Us_Sf_BFu9i) C1{ Fs FC2{} Fi:9}



static void Test_Us_Sf_BFu9i()
{
  {
    init_simple_test("Us_Sf_BFu9i");
    static STRUCT_IF_C Us_Sf_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu9i.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Us_Sf_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu9i, Us_Sf_BFu9i)
//============================================================================


struct  Us_Sf_BFu9ll  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Us_Sf_BFu9ll) C1{ Fs FC2{} FL:9}



static void Test_Us_Sf_BFu9ll()
{
  {
    init_simple_test("Us_Sf_BFu9ll");
    static STRUCT_IF_C Us_Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Us_Sf_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu9ll, Us_Sf_BFu9ll)
//============================================================================


struct  Us_Sf_BFu9s  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Us_Sf_BFu9s) C1{ Fs FC2{} Fs:9}



static void Test_Us_Sf_BFu9s()
{
  {
    init_simple_test("Us_Sf_BFu9s");
    static STRUCT_IF_C Us_Sf_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_Sf_BFu9s.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "Us_Sf_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "Us_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_BFu9s, Us_Sf_BFu9s)
//============================================================================


struct  Us_Sf_C  {
  unsigned short v1;
  struct empty v2;
  char v3;
};
//SIG(1 Us_Sf_C) C1{ Fs FC2{} Fc}



static void Test_Us_Sf_C()
{
  {
    init_simple_test("Us_Sf_C");
    STRUCT_IF_C Us_Sf_C lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_C)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_C)");
    check_field_offset(lv, v1, 0, "Us_Sf_C.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_C.v2");
    check_field_offset(lv, v3, 2, "Us_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_C, Us_Sf_C)
//============================================================================


struct  Us_Sf_D  {
  unsigned short v1;
  struct empty v2;
  double v3;
};
//SIG(1 Us_Sf_D) C1{ Fs FC2{} FL}



static void Test_Us_Sf_D()
{
  {
    init_simple_test("Us_Sf_D");
    STRUCT_IF_C Us_Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_D)");
    check_field_offset(lv, v1, 0, "Us_Sf_D.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Us_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_D, Us_Sf_D)
//============================================================================


struct  Us_Sf_F  {
  unsigned short v1;
  struct empty v2;
  float v3;
};
//SIG(1 Us_Sf_F) C1{ Fs FC2{} Fi}



static void Test_Us_Sf_F()
{
  {
    init_simple_test("Us_Sf_F");
    STRUCT_IF_C Us_Sf_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_F)");
    check_field_offset(lv, v1, 0, "Us_Sf_F.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_F.v2");
    check_field_offset(lv, v3, 4, "Us_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_F, Us_Sf_F)
//============================================================================


struct  Us_Sf_I  {
  unsigned short v1;
  struct empty v2;
  int v3;
};
//SIG(1 Us_Sf_I) C1{ Fs FC2{} Fi}



static void Test_Us_Sf_I()
{
  {
    init_simple_test("Us_Sf_I");
    STRUCT_IF_C Us_Sf_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_I)");
    check_field_offset(lv, v1, 0, "Us_Sf_I.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_I.v2");
    check_field_offset(lv, v3, 4, "Us_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_I, Us_Sf_I)
//============================================================================


struct  Us_Sf_Ip  {
  unsigned short v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Us_Sf_Ip) C1{ Fs FC2{} Fp}



static void Test_Us_Sf_Ip()
{
  {
    init_simple_test("Us_Sf_Ip");
    STRUCT_IF_C Us_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Us_Sf_Ip.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Us_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Ip, Us_Sf_Ip)
//============================================================================


struct  Us_Sf_L  {
  unsigned short v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Us_Sf_L) C1{ Fs FC2{} FL}



static void Test_Us_Sf_L()
{
  {
    init_simple_test("Us_Sf_L");
    STRUCT_IF_C Us_Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_L)");
    check_field_offset(lv, v1, 0, "Us_Sf_L.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Us_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_L, Us_Sf_L)
//============================================================================


struct  Us_Sf_S  {
  unsigned short v1;
  struct empty v2;
  short v3;
};
//SIG(1 Us_Sf_S) C1{ Fs FC2{} Fs}



static void Test_Us_Sf_S()
{
  {
    init_simple_test("Us_Sf_S");
    STRUCT_IF_C Us_Sf_S lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_S)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_S)");
    check_field_offset(lv, v1, 0, "Us_Sf_S.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_S.v2");
    check_field_offset(lv, v3, 2, "Us_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_S, Us_Sf_S)
//============================================================================


struct  Us_Sf_Sf  {
  unsigned short v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Us_Sf_Sf) C1{ Fs FC2{} FC2}



static void Test_Us_Sf_Sf()
{
  {
    init_simple_test("Us_Sf_Sf");
    STRUCT_IF_C Us_Sf_Sf lv;
    check2(sizeof(lv), 2, "sizeof(Us_Sf_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Us_Sf_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Sf.v2");
    check_field_offset(lv, v3, 2, "Us_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Sf, Us_Sf_Sf)
//============================================================================


struct  Us_Sf_Uc  {
  unsigned short v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Us_Sf_Uc) C1{ Fs FC2{} Fc}



static void Test_Us_Sf_Uc()
{
  {
    init_simple_test("Us_Sf_Uc");
    STRUCT_IF_C Us_Sf_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Us_Sf_Uc.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Uc.v2");
    check_field_offset(lv, v3, 2, "Us_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Uc, Us_Sf_Uc)
//============================================================================


struct  Us_Sf_Ui  {
  unsigned short v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Us_Sf_Ui) C1{ Fs FC2{} Fi}



static void Test_Us_Sf_Ui()
{
  {
    init_simple_test("Us_Sf_Ui");
    STRUCT_IF_C Us_Sf_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_Sf_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Us_Sf_Ui.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Ui.v2");
    check_field_offset(lv, v3, 4, "Us_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Ui, Us_Sf_Ui)
//============================================================================


struct  Us_Sf_Ul  {
  unsigned short v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Us_Sf_Ul) C1{ Fs FC2{} FL}



static void Test_Us_Sf_Ul()
{
  {
    init_simple_test("Us_Sf_Ul");
    STRUCT_IF_C Us_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Us_Sf_Ul.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Us_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Ul, Us_Sf_Ul)
//============================================================================


struct  Us_Sf_Us  {
  unsigned short v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Us_Sf_Us) C1{ Fs FC2{} Fs}



static void Test_Us_Sf_Us()
{
  {
    init_simple_test("Us_Sf_Us");
    STRUCT_IF_C Us_Sf_Us lv;
    check2(sizeof(lv), 4, "sizeof(Us_Sf_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Sf_Us)");
    check_field_offset(lv, v1, 0, "Us_Sf_Us.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Us.v2");
    check_field_offset(lv, v3, 2, "Us_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Us, Us_Sf_Us)
//============================================================================


struct  Us_Sf_Vp  {
  unsigned short v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Us_Sf_Vp) C1{ Fs FC2{} Fp}



static void Test_Us_Sf_Vp()
{
  {
    init_simple_test("Us_Sf_Vp");
    STRUCT_IF_C Us_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Us_Sf_Vp.v1");
    check_field_offset(lv, v2, 2, "Us_Sf_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Us_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Sf_Vp, Us_Sf_Vp)
//============================================================================


struct  Us_Uc_Sf  {
  unsigned short v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Us_Uc_Sf) C1{ Fs Fc FC2{}}



static void Test_Us_Uc_Sf()
{
  {
    init_simple_test("Us_Uc_Sf");
    STRUCT_IF_C Us_Uc_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Us_Uc_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_Sf.v2");
    check_field_offset(lv, v3, 3, "Us_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Uc_Sf, Us_Uc_Sf)
//============================================================================


struct  Us_Ui_Sf  {
  unsigned short v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Us_Ui_Sf) C1{ Fs Fi FC2{}}



static void Test_Us_Ui_Sf()
{
  {
    init_simple_test("Us_Ui_Sf");
    STRUCT_IF_C Us_Ui_Sf lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_Sf)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Us_Ui_Sf.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_Sf.v2");
    check_field_offset(lv, v3, 8, "Us_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ui_Sf, Us_Ui_Sf)
//============================================================================


struct  Us_Ul_Sf  {
  unsigned short v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Us_Ul_Sf) C1{ Fs FL FC2{}}



static void Test_Us_Ul_Sf()
{
  {
    init_simple_test("Us_Ul_Sf");
    STRUCT_IF_C Us_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Us_Ul_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Us_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ul_Sf, Us_Ul_Sf)
//============================================================================


struct  Us_Us_Sf  {
  unsigned short v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Us_Us_Sf) C1{ Fs[2] FC2{}}



static void Test_Us_Us_Sf()
{
  {
    init_simple_test("Us_Us_Sf");
    STRUCT_IF_C Us_Us_Sf lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_Sf)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Us_Sf)");
    check_field_offset(lv, v1, 0, "Us_Us_Sf.v1");
    check_field_offset(lv, v2, 2, "Us_Us_Sf.v2");
    check_field_offset(lv, v3, 4, "Us_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Us_Sf, Us_Us_Sf)
//============================================================================


struct  Us_Vp_Sf  {
  unsigned short v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Us_Vp_Sf) C1{ Fs Fp FC2{}}



static void Test_Us_Vp_Sf()
{
  {
    init_simple_test("Us_Vp_Sf");
    STRUCT_IF_C Us_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Us_Vp_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Us_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Vp_Sf, Us_Vp_Sf)
//============================================================================


struct  Vp_BFu15i_Sf  {
  void *v1;
  unsigned int v2:15;
  struct empty v3;
};
//SIG(1 Vp_BFu15i_Sf) C1{ Fp Fi:15 FC2{}}



static void Test_Vp_BFu15i_Sf()
{
  {
    init_simple_test("Vp_BFu15i_Sf");
    static STRUCT_IF_C Vp_BFu15i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu15i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15i_Sf, Vp_BFu15i_Sf)
//============================================================================


struct  Vp_BFu15ll_Sf  {
  void *v1;
  __tsu64 v2:15;
  struct empty v3;
};
//SIG(1 Vp_BFu15ll_Sf) C1{ Fp FL:15 FC2{}}



static void Test_Vp_BFu15ll_Sf()
{
  {
    init_simple_test("Vp_BFu15ll_Sf");
    static STRUCT_IF_C Vp_BFu15ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu15ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15ll_Sf, Vp_BFu15ll_Sf)
//============================================================================


struct  Vp_BFu15s_Sf  {
  void *v1;
  unsigned short v2:15;
  struct empty v3;
};
//SIG(1 Vp_BFu15s_Sf) C1{ Fp Fs:15 FC2{}}



static void Test_Vp_BFu15s_Sf()
{
  {
    init_simple_test("Vp_BFu15s_Sf");
    static STRUCT_IF_C Vp_BFu15s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu15s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15s_Sf, Vp_BFu15s_Sf)
//============================================================================


struct  Vp_BFu16i_Sf  {
  void *v1;
  unsigned int v2:16;
  struct empty v3;
};
//SIG(1 Vp_BFu16i_Sf) C1{ Fp Fi:16 FC2{}}



static void Test_Vp_BFu16i_Sf()
{
  {
    init_simple_test("Vp_BFu16i_Sf");
    static STRUCT_IF_C Vp_BFu16i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu16i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16i_Sf, Vp_BFu16i_Sf)
//============================================================================


struct  Vp_BFu16ll_Sf  {
  void *v1;
  __tsu64 v2:16;
  struct empty v3;
};
//SIG(1 Vp_BFu16ll_Sf) C1{ Fp FL:16 FC2{}}



static void Test_Vp_BFu16ll_Sf()
{
  {
    init_simple_test("Vp_BFu16ll_Sf");
    static STRUCT_IF_C Vp_BFu16ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu16ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16ll_Sf, Vp_BFu16ll_Sf)
//============================================================================


struct  Vp_BFu16s_Sf  {
  void *v1;
  unsigned short v2:16;
  struct empty v3;
};
//SIG(1 Vp_BFu16s_Sf) C1{ Fp Fs:16 FC2{}}



static void Test_Vp_BFu16s_Sf()
{
  {
    init_simple_test("Vp_BFu16s_Sf");
    static STRUCT_IF_C Vp_BFu16s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu16s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16s_Sf, Vp_BFu16s_Sf)
//============================================================================


struct  Vp_BFu17i_Sf  {
  void *v1;
  unsigned int v2:17;
  struct empty v3;
};
//SIG(1 Vp_BFu17i_Sf) C1{ Fp Fi:17 FC2{}}



static void Test_Vp_BFu17i_Sf()
{
  {
    init_simple_test("Vp_BFu17i_Sf");
    static STRUCT_IF_C Vp_BFu17i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_Sf");
    check_field_offset(lv, v3, ABISELECT(11,7), "Vp_BFu17i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17i_Sf, Vp_BFu17i_Sf)
//============================================================================


struct  Vp_BFu17ll_Sf  {
  void *v1;
  __tsu64 v2:17;
  struct empty v3;
};
//SIG(1 Vp_BFu17ll_Sf) C1{ Fp FL:17 FC2{}}



static void Test_Vp_BFu17ll_Sf()
{
  {
    init_simple_test("Vp_BFu17ll_Sf");
    static STRUCT_IF_C Vp_BFu17ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_Sf");
    check_field_offset(lv, v3, ABISELECT(11,7), "Vp_BFu17ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17ll_Sf, Vp_BFu17ll_Sf)
//============================================================================


struct  Vp_BFu1c_Sf  {
  void *v1;
  unsigned char v2:1;
  struct empty v3;
};
//SIG(1 Vp_BFu1c_Sf) C1{ Fp Fc:1 FC2{}}



static void Test_Vp_BFu1c_Sf()
{
  {
    init_simple_test("Vp_BFu1c_Sf");
    static STRUCT_IF_C Vp_BFu1c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu1c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1c_Sf, Vp_BFu1c_Sf)
//============================================================================


struct  Vp_BFu1i_Sf  {
  void *v1;
  unsigned int v2:1;
  struct empty v3;
};
//SIG(1 Vp_BFu1i_Sf) C1{ Fp Fi:1 FC2{}}



static void Test_Vp_BFu1i_Sf()
{
  {
    init_simple_test("Vp_BFu1i_Sf");
    static STRUCT_IF_C Vp_BFu1i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu1i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1i_Sf, Vp_BFu1i_Sf)
//============================================================================


struct  Vp_BFu1ll_Sf  {
  void *v1;
  __tsu64 v2:1;
  struct empty v3;
};
//SIG(1 Vp_BFu1ll_Sf) C1{ Fp FL:1 FC2{}}



static void Test_Vp_BFu1ll_Sf()
{
  {
    init_simple_test("Vp_BFu1ll_Sf");
    static STRUCT_IF_C Vp_BFu1ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu1ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1ll_Sf, Vp_BFu1ll_Sf)
//============================================================================


struct  Vp_BFu1s_Sf  {
  void *v1;
  unsigned short v2:1;
  struct empty v3;
};
//SIG(1 Vp_BFu1s_Sf) C1{ Fp Fs:1 FC2{}}



static void Test_Vp_BFu1s_Sf()
{
  {
    init_simple_test("Vp_BFu1s_Sf");
    static STRUCT_IF_C Vp_BFu1s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu1s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1s_Sf, Vp_BFu1s_Sf)
//============================================================================


struct  Vp_BFu31i_Sf  {
  void *v1;
  unsigned int v2:31;
  struct empty v3;
};
//SIG(1 Vp_BFu31i_Sf) C1{ Fp Fi:31 FC2{}}



static void Test_Vp_BFu31i_Sf()
{
  {
    init_simple_test("Vp_BFu31i_Sf");
    static STRUCT_IF_C Vp_BFu31i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_Sf");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_BFu31i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31i_Sf, Vp_BFu31i_Sf)
//============================================================================


struct  Vp_BFu31ll_Sf  {
  void *v1;
  __tsu64 v2:31;
  struct empty v3;
};
//SIG(1 Vp_BFu31ll_Sf) C1{ Fp FL:31 FC2{}}



static void Test_Vp_BFu31ll_Sf()
{
  {
    init_simple_test("Vp_BFu31ll_Sf");
    static STRUCT_IF_C Vp_BFu31ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_Sf");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_BFu31ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31ll_Sf, Vp_BFu31ll_Sf)
//============================================================================


struct  Vp_BFu32i_Sf  {
  void *v1;
  unsigned int v2:32;
  struct empty v3;
};
//SIG(1 Vp_BFu32i_Sf) C1{ Fp Fi:32 FC2{}}



static void Test_Vp_BFu32i_Sf()
{
  {
    init_simple_test("Vp_BFu32i_Sf");
    static STRUCT_IF_C Vp_BFu32i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_Sf");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_BFu32i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32i_Sf, Vp_BFu32i_Sf)
//============================================================================


struct  Vp_BFu32ll_Sf  {
  void *v1;
  __tsu64 v2:32;
  struct empty v3;
};
//SIG(1 Vp_BFu32ll_Sf) C1{ Fp FL:32 FC2{}}



static void Test_Vp_BFu32ll_Sf()
{
  {
    init_simple_test("Vp_BFu32ll_Sf");
    static STRUCT_IF_C Vp_BFu32ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_Sf");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_BFu32ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32ll_Sf, Vp_BFu32ll_Sf)
//============================================================================


struct  Vp_BFu33_Sf  {
  void *v1;
  __tsu64 v2:33;
  struct empty v3;
};
//SIG(1 Vp_BFu33_Sf) C1{ Fp FL:33 FC2{}}



static void Test_Vp_BFu33_Sf()
{
  {
    init_simple_test("Vp_BFu33_Sf");
    static STRUCT_IF_C Vp_BFu33_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_Sf");
    check_field_offset(lv, v3, ABISELECT(13,9), "Vp_BFu33_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu33_Sf, Vp_BFu33_Sf)
//============================================================================


struct  Vp_BFu7c_Sf  {
  void *v1;
  unsigned char v2:7;
  struct empty v3;
};
//SIG(1 Vp_BFu7c_Sf) C1{ Fp Fc:7 FC2{}}



static void Test_Vp_BFu7c_Sf()
{
  {
    init_simple_test("Vp_BFu7c_Sf");
    static STRUCT_IF_C Vp_BFu7c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu7c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7c_Sf, Vp_BFu7c_Sf)
//============================================================================


struct  Vp_BFu7i_Sf  {
  void *v1;
  unsigned int v2:7;
  struct empty v3;
};
//SIG(1 Vp_BFu7i_Sf) C1{ Fp Fi:7 FC2{}}



static void Test_Vp_BFu7i_Sf()
{
  {
    init_simple_test("Vp_BFu7i_Sf");
    static STRUCT_IF_C Vp_BFu7i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu7i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7i_Sf, Vp_BFu7i_Sf)
//============================================================================


struct  Vp_BFu7ll_Sf  {
  void *v1;
  __tsu64 v2:7;
  struct empty v3;
};
//SIG(1 Vp_BFu7ll_Sf) C1{ Fp FL:7 FC2{}}



static void Test_Vp_BFu7ll_Sf()
{
  {
    init_simple_test("Vp_BFu7ll_Sf");
    static STRUCT_IF_C Vp_BFu7ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu7ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7ll_Sf, Vp_BFu7ll_Sf)
//============================================================================


struct  Vp_BFu7s_Sf  {
  void *v1;
  unsigned short v2:7;
  struct empty v3;
};
//SIG(1 Vp_BFu7s_Sf) C1{ Fp Fs:7 FC2{}}



static void Test_Vp_BFu7s_Sf()
{
  {
    init_simple_test("Vp_BFu7s_Sf");
    static STRUCT_IF_C Vp_BFu7s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu7s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7s_Sf, Vp_BFu7s_Sf)
//============================================================================


struct  Vp_BFu8c_Sf  {
  void *v1;
  unsigned char v2:8;
  struct empty v3;
};
//SIG(1 Vp_BFu8c_Sf) C1{ Fp Fc:8 FC2{}}



static void Test_Vp_BFu8c_Sf()
{
  {
    init_simple_test("Vp_BFu8c_Sf");
    static STRUCT_IF_C Vp_BFu8c_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu8c_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8c_Sf, Vp_BFu8c_Sf)
//============================================================================


struct  Vp_BFu8i_Sf  {
  void *v1;
  unsigned int v2:8;
  struct empty v3;
};
//SIG(1 Vp_BFu8i_Sf) C1{ Fp Fi:8 FC2{}}



static void Test_Vp_BFu8i_Sf()
{
  {
    init_simple_test("Vp_BFu8i_Sf");
    static STRUCT_IF_C Vp_BFu8i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu8i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8i_Sf, Vp_BFu8i_Sf)
//============================================================================


struct  Vp_BFu8ll_Sf  {
  void *v1;
  __tsu64 v2:8;
  struct empty v3;
};
//SIG(1 Vp_BFu8ll_Sf) C1{ Fp FL:8 FC2{}}



static void Test_Vp_BFu8ll_Sf()
{
  {
    init_simple_test("Vp_BFu8ll_Sf");
    static STRUCT_IF_C Vp_BFu8ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu8ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8ll_Sf, Vp_BFu8ll_Sf)
//============================================================================


struct  Vp_BFu8s_Sf  {
  void *v1;
  unsigned short v2:8;
  struct empty v3;
};
//SIG(1 Vp_BFu8s_Sf) C1{ Fp Fs:8 FC2{}}



static void Test_Vp_BFu8s_Sf()
{
  {
    init_simple_test("Vp_BFu8s_Sf");
    static STRUCT_IF_C Vp_BFu8s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_Sf");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_BFu8s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8s_Sf, Vp_BFu8s_Sf)
//============================================================================


struct  Vp_BFu9i_Sf  {
  void *v1;
  unsigned int v2:9;
  struct empty v3;
};
//SIG(1 Vp_BFu9i_Sf) C1{ Fp Fi:9 FC2{}}



static void Test_Vp_BFu9i_Sf()
{
  {
    init_simple_test("Vp_BFu9i_Sf");
    static STRUCT_IF_C Vp_BFu9i_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu9i_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9i_Sf, Vp_BFu9i_Sf)
//============================================================================


struct  Vp_BFu9ll_Sf  {
  void *v1;
  __tsu64 v2:9;
  struct empty v3;
};
//SIG(1 Vp_BFu9ll_Sf) C1{ Fp FL:9 FC2{}}



static void Test_Vp_BFu9ll_Sf()
{
  {
    init_simple_test("Vp_BFu9ll_Sf");
    static STRUCT_IF_C Vp_BFu9ll_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu9ll_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9ll_Sf, Vp_BFu9ll_Sf)
//============================================================================


struct  Vp_BFu9s_Sf  {
  void *v1;
  unsigned short v2:9;
  struct empty v3;
};
//SIG(1 Vp_BFu9s_Sf) C1{ Fp Fs:9 FC2{}}



static void Test_Vp_BFu9s_Sf()
{
  {
    init_simple_test("Vp_BFu9s_Sf");
    static STRUCT_IF_C Vp_BFu9s_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_Sf)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_Sf.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_Sf");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_Sf");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_BFu9s_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9s_Sf, Vp_BFu9s_Sf)
//============================================================================


struct  Vp_C_Sf  {
  void *v1;
  char v2;
  struct empty v3;
};
//SIG(1 Vp_C_Sf) C1{ Fp Fc FC2{}}



static void Test_Vp_C_Sf()
{
  {
    init_simple_test("Vp_C_Sf");
    STRUCT_IF_C Vp_C_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_Sf)");
    check_field_offset(lv, v1, 0, "Vp_C_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_C_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_C_Sf, Vp_C_Sf)
//============================================================================


struct  Vp_D_Sf  {
  void *v1;
  double v2;
  struct empty v3;
};
//SIG(1 Vp_D_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_D_Sf()
{
  {
    init_simple_test("Vp_D_Sf");
    STRUCT_IF_C Vp_D_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_Sf)");
    check_field_offset(lv, v1, 0, "Vp_D_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Vp_D_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_D_Sf, Vp_D_Sf)
//============================================================================


struct  Vp_F_Sf  {
  void *v1;
  float v2;
  struct empty v3;
};
//SIG(1 Vp_F_Sf) C1{ Fp Fi FC2{}}



static void Test_Vp_F_Sf()
{
  {
    init_simple_test("Vp_F_Sf");
    STRUCT_IF_C Vp_F_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_Sf)");
    check_field_offset(lv, v1, 0, "Vp_F_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_F_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_F_Sf, Vp_F_Sf)
//============================================================================


struct  Vp_I_Sf  {
  void *v1;
  int v2;
  struct empty v3;
};
//SIG(1 Vp_I_Sf) C1{ Fp Fi FC2{}}



static void Test_Vp_I_Sf()
{
  {
    init_simple_test("Vp_I_Sf");
    STRUCT_IF_C Vp_I_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_Sf)");
    check_field_offset(lv, v1, 0, "Vp_I_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_I_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_I_Sf, Vp_I_Sf)
//============================================================================


struct  Vp_Ip_Sf  {
  void *v1;
  int *v2;
  struct empty v3;
};
//SIG(1 Vp_Ip_Sf) C1{ Fp[2] FC2{}}



static void Test_Vp_Ip_Sf()
{
  {
    init_simple_test("Vp_Ip_Sf");
    STRUCT_IF_C Vp_Ip_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Ip_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Vp_Ip_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ip_Sf, Vp_Ip_Sf)
//============================================================================


struct  Vp_L_Sf  {
  void *v1;
  __tsi64 v2;
  struct empty v3;
};
//SIG(1 Vp_L_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_L_Sf()
{
  {
    init_simple_test("Vp_L_Sf");
    STRUCT_IF_C Vp_L_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_Sf)");
    check_field_offset(lv, v1, 0, "Vp_L_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Vp_L_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_L_Sf, Vp_L_Sf)
//============================================================================


struct  Vp_S_Sf  {
  void *v1;
  short v2;
  struct empty v3;
};
//SIG(1 Vp_S_Sf) C1{ Fp Fs FC2{}}



static void Test_Vp_S_Sf()
{
  {
    init_simple_test("Vp_S_Sf");
    STRUCT_IF_C Vp_S_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_Sf)");
    check_field_offset(lv, v1, 0, "Vp_S_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_S_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_S_Sf, Vp_S_Sf)
//============================================================================


struct  Vp_Sf  {
  void *v1;
  struct empty v2;
};
//SIG(1 Vp_Sf) C1{ Fp FC2{}}



static void Test_Vp_Sf()
{
  {
    init_simple_test("Vp_Sf");
    STRUCT_IF_C Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf, Vp_Sf)
//============================================================================


struct  Vp_Sf_BFu15i  {
  void *v1;
  struct empty v2;
  unsigned int v3:15;
};
//SIG(1 Vp_Sf_BFu15i) C1{ Fp FC2{} Fi:15}



static void Test_Vp_Sf_BFu15i()
{
  {
    init_simple_test("Vp_Sf_BFu15i");
    static STRUCT_IF_C Vp_Sf_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Vp_Sf_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu15i, Vp_Sf_BFu15i)
//============================================================================


struct  Vp_Sf_BFu15ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:15;
};
//SIG(1 Vp_Sf_BFu15ll) C1{ Fp FC2{} FL:15}



static void Test_Vp_Sf_BFu15ll()
{
  {
    init_simple_test("Vp_Sf_BFu15ll");
    static STRUCT_IF_C Vp_Sf_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Vp_Sf_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu15ll, Vp_Sf_BFu15ll)
//============================================================================


struct  Vp_Sf_BFu15s  {
  void *v1;
  struct empty v2;
  unsigned short v3:15;
};
//SIG(1 Vp_Sf_BFu15s) C1{ Fp FC2{} Fs:15}



static void Test_Vp_Sf_BFu15s()
{
  {
    init_simple_test("Vp_Sf_BFu15s");
    static STRUCT_IF_C Vp_Sf_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, 1, "Vp_Sf_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_Sf_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu15s, Vp_Sf_BFu15s)
//============================================================================


struct  Vp_Sf_BFu16i  {
  void *v1;
  struct empty v2;
  unsigned int v3:16;
};
//SIG(1 Vp_Sf_BFu16i) C1{ Fp FC2{} Fi:16}



static void Test_Vp_Sf_BFu16i()
{
  {
    init_simple_test("Vp_Sf_BFu16i");
    static STRUCT_IF_C Vp_Sf_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Vp_Sf_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu16i, Vp_Sf_BFu16i)
//============================================================================


struct  Vp_Sf_BFu16ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:16;
};
//SIG(1 Vp_Sf_BFu16ll) C1{ Fp FC2{} FL:16}



static void Test_Vp_Sf_BFu16ll()
{
  {
    init_simple_test("Vp_Sf_BFu16ll");
    static STRUCT_IF_C Vp_Sf_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Vp_Sf_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu16ll, Vp_Sf_BFu16ll)
//============================================================================


struct  Vp_Sf_BFu16s  {
  void *v1;
  struct empty v2;
  unsigned short v3:16;
};
//SIG(1 Vp_Sf_BFu16s) C1{ Fp FC2{} Fs:16}



static void Test_Vp_Sf_BFu16s()
{
  {
    init_simple_test("Vp_Sf_BFu16s");
    static STRUCT_IF_C Vp_Sf_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, 1, "Vp_Sf_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_Sf_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu16s, Vp_Sf_BFu16s)
//============================================================================


struct  Vp_Sf_BFu17i  {
  void *v1;
  struct empty v2;
  unsigned int v3:17;
};
//SIG(1 Vp_Sf_BFu17i) C1{ Fp FC2{} Fi:17}



static void Test_Vp_Sf_BFu17i()
{
  {
    init_simple_test("Vp_Sf_BFu17i");
    static STRUCT_IF_C Vp_Sf_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Vp_Sf_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_Sf_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu17i, Vp_Sf_BFu17i)
//============================================================================


struct  Vp_Sf_BFu17ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:17;
};
//SIG(1 Vp_Sf_BFu17ll) C1{ Fp FC2{} FL:17}



static void Test_Vp_Sf_BFu17ll()
{
  {
    init_simple_test("Vp_Sf_BFu17ll");
    static STRUCT_IF_C Vp_Sf_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, 1, "Vp_Sf_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_Sf_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu17ll, Vp_Sf_BFu17ll)
//============================================================================


struct  Vp_Sf_BFu1c  {
  void *v1;
  struct empty v2;
  unsigned char v3:1;
};
//SIG(1 Vp_Sf_BFu1c) C1{ Fp FC2{} Fc:1}



static void Test_Vp_Sf_BFu1c()
{
  {
    init_simple_test("Vp_Sf_BFu1c");
    static STRUCT_IF_C Vp_Sf_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Vp_Sf_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu1c, Vp_Sf_BFu1c)
//============================================================================


struct  Vp_Sf_BFu1i  {
  void *v1;
  struct empty v2;
  unsigned int v3:1;
};
//SIG(1 Vp_Sf_BFu1i) C1{ Fp FC2{} Fi:1}



static void Test_Vp_Sf_BFu1i()
{
  {
    init_simple_test("Vp_Sf_BFu1i");
    static STRUCT_IF_C Vp_Sf_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Vp_Sf_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu1i, Vp_Sf_BFu1i)
//============================================================================


struct  Vp_Sf_BFu1ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:1;
};
//SIG(1 Vp_Sf_BFu1ll) C1{ Fp FC2{} FL:1}



static void Test_Vp_Sf_BFu1ll()
{
  {
    init_simple_test("Vp_Sf_BFu1ll");
    static STRUCT_IF_C Vp_Sf_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Vp_Sf_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu1ll, Vp_Sf_BFu1ll)
//============================================================================


struct  Vp_Sf_BFu1s  {
  void *v1;
  struct empty v2;
  unsigned short v3:1;
};
//SIG(1 Vp_Sf_BFu1s) C1{ Fp FC2{} Fs:1}



static void Test_Vp_Sf_BFu1s()
{
  {
    init_simple_test("Vp_Sf_BFu1s");
    static STRUCT_IF_C Vp_Sf_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 1, 1, "Vp_Sf_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu1s, Vp_Sf_BFu1s)
//============================================================================


struct  Vp_Sf_BFu31i  {
  void *v1;
  struct empty v2;
  unsigned int v3:31;
};
//SIG(1 Vp_Sf_BFu31i) C1{ Fp FC2{} Fi:31}



static void Test_Vp_Sf_BFu31i()
{
  {
    init_simple_test("Vp_Sf_BFu31i");
    static STRUCT_IF_C Vp_Sf_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Vp_Sf_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_Sf_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu31i, Vp_Sf_BFu31i)
//============================================================================


struct  Vp_Sf_BFu31ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:31;
};
//SIG(1 Vp_Sf_BFu31ll) C1{ Fp FC2{} FL:31}



static void Test_Vp_Sf_BFu31ll()
{
  {
    init_simple_test("Vp_Sf_BFu31ll");
    static STRUCT_IF_C Vp_Sf_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, 1, "Vp_Sf_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_Sf_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu31ll, Vp_Sf_BFu31ll)
//============================================================================


struct  Vp_Sf_BFu32i  {
  void *v1;
  struct empty v2;
  unsigned int v3:32;
};
//SIG(1 Vp_Sf_BFu32i) C1{ Fp FC2{} Fi:32}



static void Test_Vp_Sf_BFu32i()
{
  {
    init_simple_test("Vp_Sf_BFu32i");
    static STRUCT_IF_C Vp_Sf_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Vp_Sf_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_Sf_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu32i, Vp_Sf_BFu32i)
//============================================================================


struct  Vp_Sf_BFu32ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:32;
};
//SIG(1 Vp_Sf_BFu32ll) C1{ Fp FC2{} FL:32}



static void Test_Vp_Sf_BFu32ll()
{
  {
    init_simple_test("Vp_Sf_BFu32ll");
    static STRUCT_IF_C Vp_Sf_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, 1, "Vp_Sf_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_Sf_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu32ll, Vp_Sf_BFu32ll)
//============================================================================


struct  Vp_Sf_BFu33  {
  void *v1;
  struct empty v2;
  __tsu64 v3:33;
};
//SIG(1 Vp_Sf_BFu33) C1{ Fp FC2{} FL:33}



static void Test_Vp_Sf_BFu33()
{
  {
    init_simple_test("Vp_Sf_BFu33");
    static STRUCT_IF_C Vp_Sf_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Sf_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "Vp_Sf_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_Sf_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu33, Vp_Sf_BFu33)
//============================================================================


struct  Vp_Sf_BFu7c  {
  void *v1;
  struct empty v2;
  unsigned char v3:7;
};
//SIG(1 Vp_Sf_BFu7c) C1{ Fp FC2{} Fc:7}



static void Test_Vp_Sf_BFu7c()
{
  {
    init_simple_test("Vp_Sf_BFu7c");
    static STRUCT_IF_C Vp_Sf_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Vp_Sf_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu7c, Vp_Sf_BFu7c)
//============================================================================


struct  Vp_Sf_BFu7i  {
  void *v1;
  struct empty v2;
  unsigned int v3:7;
};
//SIG(1 Vp_Sf_BFu7i) C1{ Fp FC2{} Fi:7}



static void Test_Vp_Sf_BFu7i()
{
  {
    init_simple_test("Vp_Sf_BFu7i");
    static STRUCT_IF_C Vp_Sf_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Vp_Sf_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu7i, Vp_Sf_BFu7i)
//============================================================================


struct  Vp_Sf_BFu7ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:7;
};
//SIG(1 Vp_Sf_BFu7ll) C1{ Fp FC2{} FL:7}



static void Test_Vp_Sf_BFu7ll()
{
  {
    init_simple_test("Vp_Sf_BFu7ll");
    static STRUCT_IF_C Vp_Sf_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Vp_Sf_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu7ll, Vp_Sf_BFu7ll)
//============================================================================


struct  Vp_Sf_BFu7s  {
  void *v1;
  struct empty v2;
  unsigned short v3:7;
};
//SIG(1 Vp_Sf_BFu7s) C1{ Fp FC2{} Fs:7}



static void Test_Vp_Sf_BFu7s()
{
  {
    init_simple_test("Vp_Sf_BFu7s");
    static STRUCT_IF_C Vp_Sf_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, 1, "Vp_Sf_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_Sf_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu7s, Vp_Sf_BFu7s)
//============================================================================


struct  Vp_Sf_BFu8c  {
  void *v1;
  struct empty v2;
  unsigned char v3:8;
};
//SIG(1 Vp_Sf_BFu8c) C1{ Fp FC2{} Fc:8}



static void Test_Vp_Sf_BFu8c()
{
  {
    init_simple_test("Vp_Sf_BFu8c");
    static STRUCT_IF_C Vp_Sf_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Vp_Sf_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu8c, Vp_Sf_BFu8c)
//============================================================================


struct  Vp_Sf_BFu8i  {
  void *v1;
  struct empty v2;
  unsigned int v3:8;
};
//SIG(1 Vp_Sf_BFu8i) C1{ Fp FC2{} Fi:8}



static void Test_Vp_Sf_BFu8i()
{
  {
    init_simple_test("Vp_Sf_BFu8i");
    static STRUCT_IF_C Vp_Sf_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Vp_Sf_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu8i, Vp_Sf_BFu8i)
//============================================================================


struct  Vp_Sf_BFu8ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:8;
};
//SIG(1 Vp_Sf_BFu8ll) C1{ Fp FC2{} FL:8}



static void Test_Vp_Sf_BFu8ll()
{
  {
    init_simple_test("Vp_Sf_BFu8ll");
    static STRUCT_IF_C Vp_Sf_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Vp_Sf_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu8ll, Vp_Sf_BFu8ll)
//============================================================================


struct  Vp_Sf_BFu8s  {
  void *v1;
  struct empty v2;
  unsigned short v3:8;
};
//SIG(1 Vp_Sf_BFu8s) C1{ Fp FC2{} Fs:8}



static void Test_Vp_Sf_BFu8s()
{
  {
    init_simple_test("Vp_Sf_BFu8s");
    static STRUCT_IF_C Vp_Sf_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, 1, "Vp_Sf_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_Sf_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu8s, Vp_Sf_BFu8s)
//============================================================================


struct  Vp_Sf_BFu9i  {
  void *v1;
  struct empty v2;
  unsigned int v3:9;
};
//SIG(1 Vp_Sf_BFu9i) C1{ Fp FC2{} Fi:9}



static void Test_Vp_Sf_BFu9i()
{
  {
    init_simple_test("Vp_Sf_BFu9i");
    static STRUCT_IF_C Vp_Sf_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Vp_Sf_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu9i, Vp_Sf_BFu9i)
//============================================================================


struct  Vp_Sf_BFu9ll  {
  void *v1;
  struct empty v2;
  __tsu64 v3:9;
};
//SIG(1 Vp_Sf_BFu9ll) C1{ Fp FC2{} FL:9}



static void Test_Vp_Sf_BFu9ll()
{
  {
    init_simple_test("Vp_Sf_BFu9ll");
    static STRUCT_IF_C Vp_Sf_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Vp_Sf_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu9ll, Vp_Sf_BFu9ll)
//============================================================================


struct  Vp_Sf_BFu9s  {
  void *v1;
  struct empty v2;
  unsigned short v3:9;
};
//SIG(1 Vp_Sf_BFu9s) C1{ Fp FC2{} Fs:9}



static void Test_Vp_Sf_BFu9s()
{
  {
    init_simple_test("Vp_Sf_BFu9s");
    static STRUCT_IF_C Vp_Sf_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_Sf_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, 1, "Vp_Sf_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_Sf_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_BFu9s, Vp_Sf_BFu9s)
//============================================================================


struct  Vp_Sf_C  {
  void *v1;
  struct empty v2;
  char v3;
};
//SIG(1 Vp_Sf_C) C1{ Fp FC2{} Fc}



static void Test_Vp_Sf_C()
{
  {
    init_simple_test("Vp_Sf_C");
    STRUCT_IF_C Vp_Sf_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_C)");
    check_field_offset(lv, v1, 0, "Vp_Sf_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_C.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_C, Vp_Sf_C)
//============================================================================


struct  Vp_Sf_D  {
  void *v1;
  struct empty v2;
  double v3;
};
//SIG(1 Vp_Sf_D) C1{ Fp FC2{} FL}



static void Test_Vp_Sf_D()
{
  {
    init_simple_test("Vp_Sf_D");
    STRUCT_IF_C Vp_Sf_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Sf_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_D)");
    check_field_offset(lv, v1, 0, "Vp_Sf_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_D, Vp_Sf_D)
//============================================================================


struct  Vp_Sf_F  {
  void *v1;
  struct empty v2;
  float v3;
};
//SIG(1 Vp_Sf_F) C1{ Fp FC2{} Fi}



static void Test_Vp_Sf_F()
{
  {
    init_simple_test("Vp_Sf_F");
    STRUCT_IF_C Vp_Sf_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_F)");
    check_field_offset(lv, v1, 0, "Vp_Sf_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_F.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_F, Vp_Sf_F)
//============================================================================


struct  Vp_Sf_I  {
  void *v1;
  struct empty v2;
  int v3;
};
//SIG(1 Vp_Sf_I) C1{ Fp FC2{} Fi}



static void Test_Vp_Sf_I()
{
  {
    init_simple_test("Vp_Sf_I");
    STRUCT_IF_C Vp_Sf_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_I)");
    check_field_offset(lv, v1, 0, "Vp_Sf_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_I.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_I, Vp_Sf_I)
//============================================================================


struct  Vp_Sf_Ip  {
  void *v1;
  struct empty v2;
  int *v3;
};
//SIG(1 Vp_Sf_Ip) C1{ Fp FC2{} Fp}



static void Test_Vp_Sf_Ip()
{
  {
    init_simple_test("Vp_Sf_Ip");
    STRUCT_IF_C Vp_Sf_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Ip)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Ip, Vp_Sf_Ip)
//============================================================================


struct  Vp_Sf_L  {
  void *v1;
  struct empty v2;
  __tsi64 v3;
};
//SIG(1 Vp_Sf_L) C1{ Fp FC2{} FL}



static void Test_Vp_Sf_L()
{
  {
    init_simple_test("Vp_Sf_L");
    STRUCT_IF_C Vp_Sf_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Sf_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_L)");
    check_field_offset(lv, v1, 0, "Vp_Sf_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_L, Vp_Sf_L)
//============================================================================


struct  Vp_Sf_S  {
  void *v1;
  struct empty v2;
  short v3;
};
//SIG(1 Vp_Sf_S) C1{ Fp FC2{} Fs}



static void Test_Vp_Sf_S()
{
  {
    init_simple_test("Vp_Sf_S");
    STRUCT_IF_C Vp_Sf_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_S)");
    check_field_offset(lv, v1, 0, "Vp_Sf_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_S.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_S, Vp_Sf_S)
//============================================================================


struct  Vp_Sf_Sf  {
  void *v1;
  struct empty v2;
  struct empty v3;
};
//SIG(1 Vp_Sf_Sf) C1{ Fp FC2{} FC2}



static void Test_Vp_Sf_Sf()
{
  {
    init_simple_test("Vp_Sf_Sf");
    STRUCT_IF_C Vp_Sf_Sf lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_Sf_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Sf, Vp_Sf_Sf)
//============================================================================


struct  Vp_Sf_Uc  {
  void *v1;
  struct empty v2;
  unsigned char v3;
};
//SIG(1 Vp_Sf_Uc) C1{ Fp FC2{} Fc}



static void Test_Vp_Sf_Uc()
{
  {
    init_simple_test("Vp_Sf_Uc");
    STRUCT_IF_C Vp_Sf_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Uc)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Uc, Vp_Sf_Uc)
//============================================================================


struct  Vp_Sf_Ui  {
  void *v1;
  struct empty v2;
  unsigned int v3;
};
//SIG(1 Vp_Sf_Ui) C1{ Fp FC2{} Fi}



static void Test_Vp_Sf_Ui()
{
  {
    init_simple_test("Vp_Sf_Ui");
    STRUCT_IF_C Vp_Sf_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Ui)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Ui, Vp_Sf_Ui)
//============================================================================


struct  Vp_Sf_Ul  {
  void *v1;
  struct empty v2;
  __tsu64 v3;
};
//SIG(1 Vp_Sf_Ul) C1{ Fp FC2{} FL}



static void Test_Vp_Sf_Ul()
{
  {
    init_simple_test("Vp_Sf_Ul");
    STRUCT_IF_C Vp_Sf_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Sf_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Ul)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Ul, Vp_Sf_Ul)
//============================================================================


struct  Vp_Sf_Us  {
  void *v1;
  struct empty v2;
  unsigned short v3;
};
//SIG(1 Vp_Sf_Us) C1{ Fp FC2{} Fs}



static void Test_Vp_Sf_Us()
{
  {
    init_simple_test("Vp_Sf_Us");
    STRUCT_IF_C Vp_Sf_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Us)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Us.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Us, Vp_Sf_Us)
//============================================================================


struct  Vp_Sf_Vp  {
  void *v1;
  struct empty v2;
  void *v3;
};
//SIG(1 Vp_Sf_Vp) C1{ Fp FC2{} Fp}



static void Test_Vp_Sf_Vp()
{
  {
    init_simple_test("Vp_Sf_Vp");
    STRUCT_IF_C Vp_Sf_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Sf_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Sf_Vp)");
    check_field_offset(lv, v1, 0, "Vp_Sf_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Sf_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "Vp_Sf_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Sf_Vp, Vp_Sf_Vp)
//============================================================================


struct  Vp_Uc_Sf  {
  void *v1;
  unsigned char v2;
  struct empty v3;
};
//SIG(1 Vp_Uc_Sf) C1{ Fp Fc FC2{}}



static void Test_Vp_Uc_Sf()
{
  {
    init_simple_test("Vp_Uc_Sf");
    STRUCT_IF_C Vp_Uc_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Uc_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(9,5), "Vp_Uc_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Uc_Sf, Vp_Uc_Sf)
//============================================================================


struct  Vp_Ui_Sf  {
  void *v1;
  unsigned int v2;
  struct empty v3;
};
//SIG(1 Vp_Ui_Sf) C1{ Fp Fi FC2{}}



static void Test_Vp_Ui_Sf()
{
  {
    init_simple_test("Vp_Ui_Sf");
    STRUCT_IF_C Vp_Ui_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Ui_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(12,8), "Vp_Ui_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ui_Sf, Vp_Ui_Sf)
//============================================================================


struct  Vp_Ul_Sf  {
  void *v1;
  __tsu64 v2;
  struct empty v3;
};
//SIG(1 Vp_Ul_Sf) C1{ Fp FL FC2{}}



static void Test_Vp_Ul_Sf()
{
  {
    init_simple_test("Vp_Ul_Sf");
    STRUCT_IF_C Vp_Ul_Sf lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Ul_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "Vp_Ul_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ul_Sf, Vp_Ul_Sf)
//============================================================================


struct  Vp_Us_Sf  {
  void *v1;
  unsigned short v2;
  struct empty v3;
};
//SIG(1 Vp_Us_Sf) C1{ Fp Fs FC2{}}



static void Test_Vp_Us_Sf()
{
  {
    init_simple_test("Vp_Us_Sf");
    STRUCT_IF_C Vp_Us_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Us_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(10,6), "Vp_Us_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Us_Sf, Vp_Us_Sf)
//============================================================================


struct  Vp_Vp_Sf  {
  void *v1;
  void *v2;
  struct empty v3;
};
//SIG(1 Vp_Vp_Sf) C1{ Fp[2] FC2{}}



static void Test_Vp_Vp_Sf()
{
  {
    init_simple_test("Vp_Vp_Sf");
    STRUCT_IF_C Vp_Vp_Sf lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_Sf)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_Sf)");
    check_field_offset(lv, v1, 0, "Vp_Vp_Sf.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_Sf.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "Vp_Vp_Sf.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Vp_Sf, Vp_Vp_Sf)
//============================================================================

